我有一个项目有以下结构。 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代码。
答案 0 :(得分:1)
我认为您应该在target_link_libraries()
中指定PUBLIC
关键字,如下所示:
target_link_library(ccc PUBLIC aaa bbb)
PUBLIC
之后的库和目标链接到链接界面,并成为其中的一部分。
答案 1 :(得分:1)
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>)