假设我有一个项目组织如下:
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)
有什么建议吗?