2016-07-09 11 views
0

私はプロジェクトのレイアウトを改善しようとしています。CMakeで依存関係を作成するには?

はここ(の一部)だ私のCMakeLists.txt

project(Numerical CXX) 

include(cotire) 

cmake_minimum_required(VERSION 3.1) 

set (CMAKE_CXX_STANDARD 14) 

add_executable(hw1 hw1.cpp 
    linalg/lu.cpp 
    linalg/banded.cpp 
) 

add_executable(hw2 hw2.cpp 
    linalg/cholesky.cpp 
    linalg/lu.cpp 
    linalg/banded.cpp 
) 

add_executable(hw3 hw3.cpp 
    linalg/solvers-new.cpp 
    linalg/cholesky.cpp 
    linalg/lu.cpp 
    linalg/banded.cpp 
) 
... 

lu.hはを含み、そうluを必要とするものもbandedが必要になります。これは私のプロジェクトで上記のように冗長性が必要です。 lu.cppを追加するたびにbanded.cppを追加する必要はありませんか?アマデウスの回答作品@

+0

コンパイル時間を短縮し、それらのライブラリにしないのはなぜ? – kfsone

+0

@kfsone:それは私がやりたいことのようなものですね!それについてどうすればいいのですか? –

答えて

1

が、私はより良い答えは、共通のファイルを取得し、ライブラリにそれらを移動することであると思う:

project(Numerical CXX) 
include(cotire) 
cmake_minimum_required(VERSION 3.1) 
set (CMAKE_CXX_STANDARD 14) 

add_library(CommonLib STATIC 
    linalg/lu.cpp 
    linalg/banded.cpp 
) 

add_executable(hw1 
    hw1.cpp 
) 

target_link_libraries(hw1 LINK_PUBLIC 
    CommonLib 
) 

add_executable(hw2 
    hw2.cpp 
    linalg/cholesky.cpp 
) 

target_link_libraries(hw2 LINK_PUBLIC 
    CommonLib 
) 

add_executable(hw3 
    hw3.cpp 
    linalg/solvers-new.cpp 
    linalg/cholesky.cpp 
) 

target_link_libraries(hw3 LINK_PUBLIC 
    CommonLib 
) 
+0

ライブラリに何が入るのかをどうやって決めるのですか? –

+2

@kreyすべてのモジュールの中で一般的に再利用しているものは何でも - linalgで使用しようとしているものすべてをそれに入れることはできません。リンク処理では、必要な関数のみが結果のバイナリに抽出されます。 – kfsone

関連する問題