次のように編成されたプロジェクトがあるとします。
Proj/src
Proj/src/library_a
Proj/src/library_b
Proj/src/executable
私がやりたいことは、変数Proj_LIBSsrc/library_a
に含まれているライブラリの名前を収集して、CMake ツリーのルートまで伝播することです。src/library_b
ファイルsrc/library_a/CMakeLists.txt
で、ターゲットのすべての名前を変数Proj_LIBSに追加し、この変数をフォルダー内の CMakeLists.txt ファイルで使用しますsrc/executable
。
Proj/src/library_a/CMakeLists.txt
は_
add_library(A1 A1.cpp)
add_library(A2 A2.cpp)
SET(Curr_LIBS "${Proj_LIBS} A1 A2")
SET(Proj_LIBS ${Curr_LIBS} PARENT_SCOPE)
実行可能ファイルを作成しようとするとProj/src/executable/CMakeLists.txt
:
add_executable(exe1 exe1.cpp)
target_link_libraries(exe1 ${Proj_LIBS})
Proj_LIBSの名前はライブラリ名として解釈されます。つまり、CMake によって準備されるコンパイル コマンドは次のとおりです。
gcc exe1.cpp -l A1 -l A2 -o exe1
に次の行を記述した場合、依存関係とは見なされませんProj/src/executable/CMakeLists.txt
。
add_executable(exe1 exe1.cpp)
target_link_libraries(exe1 A1 A2)
なにか提案を?