0

我正在使用 CMake 构建一个简单的 C++ 项目,以下命名为P。P的结构很简单:

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

我想在名为P_LIBS的变量中收集 package1, package2, ... 中的库。

在第一次尝试中,我尝试在最初设置在 src/CMakeLists.txt 文件中的名为P_LIBS的变量中收集 package1、package2、...中可用的库。但是,在子文件夹的 CMakeLists.txt 中对P_LIBS所做的更新不会传播到父文件夹。

我宁愿不在主 CMakeLists.txt 文件中编写库列表。我宁愿在目录树中移动时修改这样的变量。

在互联网上搜索后,我找不到任何有效的建议。如果我查看各种 Find 文件,我只会在它们的主 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 或其他扩展名)

4

1 回答 1

1

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

# in package1/CMakeLists.txt
set(P_LIBS ${P_LIBS} a b PARENT_SCOPE) 
于 2012-12-12T13:39:35.280 回答