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 回答