Cmake教程之三(配置库的使用要求)

CMake 教程 - 第三步:为库添加使用配置

代码仓库地址

练习 1 - 为库添加使用要求

目标

通过以下代码,可以更好地个性化控制库或可执行文件的链接和包含行,同时也增强了目标在 CMake 中的传递性质。主要使用的命令包括:

  • target_compile_definitions
  • target_compile_options
  • target_include_directories
  • target_link_directories
  • target_link_options
  • target_precompile_headers
  • target_sources

需要编辑的文件

  • MathFunctions/CMakeLists.txt
  • CMakeLists.txt

步骤

  1. MathFunctions 库中添加包含目录
    # TODO 1: MathFunctions/CMakeLists.txt
    # 将当前目录添加到 MathFunctions 的接口包含目录中
    # 并且MathFunctions指定被其他的目标链接时,会将这个目录添加到包含目录中
    # INTERFACE表示包含目录将应用于目标及其使用该目标的其他目标。
    # 其他目标使用MathFunctions的库时不担心库中有需要额外添加的目录
    target_include_directories(MathFunctions
            INTERFACE ${CMAKE_CURRENT_SOURCE_DIR})
    
    
  2. 在顶层 CMakeLists.txt 文件中删除额外添加的包含目录 add_subdirectory 调用
    # TODO : CMakeLists.txt
    # 移除对"${PROJECT_SOURCE_DIR}/MathFunctions的使用,因为连接库时会自动添加该包含目录
    target_include_directories(Tutorial PUBLIC "${PROJECT_BINARY_DIR}" "${PROJECT_SOURCE_DIR}/MathFunctions")
    

使用这种技术,只需调用 target_link_libraries 并使用库目标的名称。但是在更大的项目中,手动指定库依赖关系的经典方法很快就会变得非常复杂。

练习 2 - 配置接口库

  1. 在顶层 CMakeLists.txt 文件中利用接口库定义全局可用的内容
    #注释c++标准设置,将其封到接口库tutorial_compiler_flags中
    
    # c++17中sqrt不必include cmath
    # set(CMAKE_CXX_STANDARD 17)
    # set(CMAKE_CXX_STANDARD_REQUIRED True)
    # 生成一个接口库,这类库不编译任何文件,也不在磁盘上产生库文件
    add_library(tutorial_compiler_flags INTERFACE)
    
    target_compile_features(tutorial_compiler_flags INTERFACE cxx_std_11)
    
  2. MathFunctions/CMakeLists.txt 中添加对接口库的使用
    target_link_libraries(SqrtLibrary PUBLIC tutorial_compiler_flags)
    
    target_link_libraries(MathFunctions PUBLIC tutorial_compiler_flags)
    # 两个库都使用接口的配置
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ㄨㄛˇㄞˋㄋㄧˇ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值