CMake - 用户库

时间:2012-12-11 23:11:47

标签: cmake

假设我的项目组织如下:

Proj/src
Proj/src/library_a
Proj/src/library_b
Proj/src/executable

我想要做的是在变量 Proj_LIBS 中收集src/library_asrc/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

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

我打赌问题是使用字符串而不是列表。试试这个:

SET(Curr_LIBS "${Proj_LIBS};A1;A2")
SET(Proj_LIBS ${Curr_LIBS} PARENT_SCOPE)