首页 文章

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

提问于
浏览
1

我有一个项目有以下结构 . 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($

add_library(ccc STATIC来源)

target_link_library(ccc aaa bbb)

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

2 回答

  • 1

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

    target_link_library(ccc PUBLIC aaa bbb)
    

    PUBLIC 之后的库和目标链接到链接接口,并成为链接接口的一部分 .

  • 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>)
    

相关问题