CMAKE基于其他静态库生成静态库并将它们打包在一起

时间:2017-10-26 02:19:01

标签: linux cmake

我有一个项目有以下结构。 aaa和bbb是2个子目录,并被编译成静态库。还有一个级别(文件夹)还有另一个项目ccc,它也被编译成静态库,libccc.a是我想要的最终静态库。在libccc.a中,我希望它包括项目ccc和aaa + bbb。 我试图改变ccc的CMakelist.txt中的链接标志,但似乎无法正常工作。我想我使用的是错误的旗帜。

ccc的原始cmakelist.txt如下所示:

add_subdirectory(AAA)

add_subdirectory(BBB)

set(来源cccsrc1.cpp cccsrc2.cpp)

include_directorys($ {incdir})

add_library(ccc STATIC sources)

target_link_library(ccc aaa bbb)

所以有人知道如何更改cmake文件以告诉ccc生成静态库,其中还包括所有aaa和bbb代码。

2 个答案:

答案 0 :(得分:1)

我认为您应该在target_link_libraries()中指定PUBLIC关键字,如下所示:

target_link_library(ccc PUBLIC aaa bbb)

PUBLIC之后的库和目标链接到链接界面,并成为其中的一部分。

答案 1 :(得分:1)

使用object library

cmake_minimum_required(VERSION 3.2)
project(masterlib)

file(WRITE lib1.c "int lib1_f() {return 555;}")
file(WRITE lib2.c "int lib2_f() {return 555;}")

add_library(lib1 OBJECT lib1.c)
add_library(lib2 OBJECT lib2.c)

add_library(masterlib STATIC $<TARGET_OBJECTS:lib1> $<TARGET_OBJECTS:lib2>)