CMake之多target

一个工程中,一般包含多个target库,和一个可执行程序target。

一个target库+一个可执行程序target

目录结构如下:

.
│  CMakeLists.txt   --- 根目录CMakeLists.txt文件①
│  main.cpp
│
└─calculator
    │  add.cpp
    │  CMakeLists.txt --- 模块目录CMakeLists.txt文件②
    │
    └─include
            add.h

根目录CMakeLists.txt文件①的内容如下:

cmake_minimum_required(VERSION 3.16)

project(multi_targets VERSION 1.0.0)

set(CMAKE_CXX_COMPILER g++)

add_library(calculator_lib OBJECT)

add_subdirectory(calculator) 

add_executable(multi_targets 
    main.cpp
)

target_link_libraries(multi_targets PRIVATE
    calculator_lib
)
  • add_library库target类型:

    • OBJECT: 仅仅是编译源文件和包含头文件路径,而不会生成一个库文件target。——推荐
    • STATIC: 编译源文件和包含头文件路径,且生成一个静态库文件。
    • SHARED:编译源文件和包含头文件路径,且生成一个动态库文件。
  • target_link_libraries,链接以来的其他target(库)。链接时,最好采用PRIVATE方式,否则容易引起重定义问题链接时,最好采用PRIVATE方式,否则容易引起重定义问题。

模块目录CMakeLists.txt文件②内容如下:

target_include_directories(calculator_lib
    PUBLIC include      
)

target_sources(calculator_lib
    PRIVATE add.cpp
)

注:target_sources,最好采用PRIVATE的方式包含源文件,避免引起重定义。

main.cpp、add.h、add.cpp等都与CMake之单target中的内容相同。

多个target库+一个可执行程序target

多个target库,与单个target库类似,此处不做赘述。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值