0

次のように編成されたプロジェクトがあるとします。

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)

なにか提案を?

4

1 に答える 1

1

問題は、リストの代わりに文字列を使用していることでしょう。これを試して:

SET(Curr_LIBS "${Proj_LIBS};A1;A2")
SET(Proj_LIBS ${Curr_LIBS} PARENT_SCOPE)
于 2012-12-12T11:50:58.873 に答える