CMake:将为lib构建的对象文件重用到另一个lib目标中

Gui*_*i13 23 static file object cmake

我正在尝试将我的项目移动到CMake,同时在编译过程中进行一些优化.

这是交易:

  • 我有几个子集(必须)每个编译成一个静态库(这是有效的).
  • 我想将每个子目录中的所有目标文件收集到另一个更大,更完整的静态库中.

它看起来像这样:

.
libBig.a  # made from object from subdir1 and subdir2
subdir1/
   src/
   libSubdir1.a
subdir2/
   src/
   libSubdir2.a
Run Code Online (Sandbox Code Playgroud)

今天,我设法使用一个全局变量,其中每个子目录CMakeLists.txt将附加自己的源文件.我在我的大库中使用此变量作为"源"输入:

# the big library depends on all the source files
# ${all_src} is automatically filled with each subdir's cpp file
get_property( BigLib_src GLOBAL PROPERTY all_src)
add_library( Big STATIC ${BigLib_src}) # recompiles all the sources
Run Code Online (Sandbox Code Playgroud)

现在,这可行,但不是太糟糕,但问题是,我的所有源文件都被编译两次:一次用于子库,一次用于大型库.

CMake似乎忘记了它已经构建了它们.

必须保留subdir库,ar不能合并两个静态库.

你知道怎么做吗?

mlo*_*kot 28

您可以使用CMake 2.8.8中引入的新OBJECT库功能.这个想法在这里解释.基本上,OBJECT库与Autotools中已知的便利库类似,可以对目标文件进行分组.

查看完整的CMake OBJECT库教程.

  • 我遇到了同样的问题并尝试了 OBJECT Library,它很有魅力。谢谢 (2认同)