我正在使用CMake构建一个简单的C ++项目,此后命名为 P 。 P的结构非常简单:
我想在package1,package2,...中收集名为 P_LIBS 的变量中的库。
在第一次尝试中,我尝试在src / CMakeLists.txt文件中最初设置的名为 P_LIBS 的变量中收集package1,package2,...中可用的库。但是,子文件夹的CMakeLists.txt中对 P_LIBS 的更新不会传播到父文件夹。
我宁愿不在主CMakeLists.txt文件中写一个库列表。我宁愿在目录树中移动时修改这个变量。
在互联网上搜索后,我找不到任何有效的建议。如果我查看各种查找文件,我只会在其主CMakeLists.txt文件中看到很长的库列表。
有没有办法做什么(我希望)我上面解释过?
感谢sakra的链接,我能够将名称“传播”到父文件夹。但是,我添加到 P_LIBS 变量的名称后来被解释为“库”名称,而不是对CMake目标的引用。换句话说,如果
P_LIBS = {a, b}
'a'和'b'被解释为库名,即CMake生成:
gcc [...] -l a -o exe
而不是
gcc [...] /path/to/a.o -o exe
(。o或其他扩展名)
答案 0 :(得分:1)
您可以将目标列表构建为字符串,尝试将它们设为列表。例如:
# in package1/CMakeLists.txt
set(P_LIBS ${P_LIBS} a b PARENT_SCOPE)