CMake:收集图书馆

时间:2012-12-11 13:40:48

标签: cmake

我正在使用CMake构建一个简单的C ++项目,此后命名为 P 。 P的结构非常简单:

  • P / src /
  • P / src / package1
  • P / src / packege2
  • P / src / ...
  • P / SRC /主应用

我想在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或其他扩展名)

1 个答案:

答案 0 :(得分:1)

您可以将目标列表构建为字符串,尝试将它们设为列表。例如:

# in package1/CMakeLists.txt
set(P_LIBS ${P_LIBS} a b PARENT_SCOPE)