假设我的项目组织如下:
Proj/src
Proj/src/library_a
Proj/src/library_b
Proj/src/executable
我想要做的是在变量 Proj_LIBS 中收集src/library_a
和src/library_b
中包含的库的名称,以便传播到其根目录。 CMake树。
在文件src/library_a/CMakeLists.txt
中,我将所有目标名称添加到变量 Proj_LIBS ,然后我在文件夹{{1}中的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
Proj_LIBS 中的名称被解释为库名,即CMake编写的编译命令是:
add_executable(exe1 exe1.cpp)
target_link_libraries(exe1 ${Proj_LIBS})
如果我在gcc exe1.cpp -l A1 -l A2 -o exe1
中写下以下几行,并不被视为依赖项:
Proj/src/executable/CMakeLists.txt
有什么建议吗?
答案 0 :(得分:1)
我打赌问题是使用字符串而不是列表。试试这个:
SET(Curr_LIBS "${Proj_LIBS};A1;A2")
SET(Proj_LIBS ${Curr_LIBS} PARENT_SCOPE)