我正在尝试将我的项目转移到CMake,同时对编译过程进行一些优化。
这是交易:
- 我有几个子目录(必须)每个子目录都编译成静态库(这有效)。
- 我想将每个子目录中的所有目标文件收集到另一个更大的、完整的静态库中。
它看起来像这样:
.
libBig.a # made from object from subdir1 and subdir2
subdir1/
src/
libSubdir1.a
subdir2/
src/
libSubdir2.a
今天,我设法使用一个全局变量,其中每个子目录 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
现在,这可行了,还不错,但问题是,我所有的源文件都被编译了两次:一次用于子目录库,一次用于大库。
CMake 似乎忘记了它已经构建了它们。
I have保留子目录库和ar
无法合并两个静态库。
你知道怎么做吗?
您可以使用中引入的新 OBJECT 库功能CMake 2.8.8 http://www.kitware.com/blog/home/post/266。这个想法被解释了here http://www.cmake.org/pipermail/cmake-developers/2012-March/003693.html。基本上,OBJECT 库的概念与便利图书馆 http://sources.redhat.com/autobook/autobook/autobook_92.htmlAutotools 已知对对象文件进行分组。
检查完整的CMakeOBJECT 库教程 https://gitlab.kitware.com/cmake/community/wikis/doc/tutorials/Object-Library.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)