当前位置: 首页 > article >正文

Cmake之3.22版本重要特性及用法实例(十九)

简介: CSDN博客专家、《Android系统多媒体进阶实战》一书作者

新书发布:《Android系统多媒体进阶实战》🚀
优质专栏: Audio工程师进阶系列原创干货持续更新中……】🚀
优质专栏: 多媒体系统工程师系列原创干货持续更新中……】🚀
优质视频课程:AAOS车载系统+AOSP14系统攻城狮入门视频实战课 🚀

人生格言: 人生从来没有捷径,只有行动才是治疗恐惧和懒惰的唯一良药.

更多原创,欢迎关注:Android系统攻城狮

欢迎关注Android系统攻城狮

🍉🍉🍉文章目录🍉🍉🍉

    • 🌻1.前言
    • 🌻2.Cmake之3.22版本介绍
    • 🌻3.代码实例

🌻1.前言

本篇目的:Cmake之3.22版本重要特性及用法实例

🌻2.Cmake之3.22版本介绍

CMake 3.22 版本发布于 2021 年底,带来了众多改进和新特性,进一步提升了构建系统的功能和用户体验。以下是 CMake 3.22 版本的重要特性:

1. 支持 Apple Silicon 和 macOS Monterey
CMake 3.22 在对 Apple Silicon 支持的基础上,进一步优化了对 macOS Monterey 操作系统的兼容性。这意味着在新的 macOS 版本上,CMake 3.22 可以更好地处理构建任务,并充分利用 M1 和 M1 Pro 芯片的性能优势。

2. 改进的 CMakePresets.json 文件
CMake 3.22 对 CMakePresets.json 文件进行了进一步增强,增加了更多的配置选项和灵活性。开发者现在可以通过预设文件更容易地定义构建和测试的流程,并且预设的兼容性和可移植性得到了提升,这使得跨团队和跨平台的构建更加顺畅。

3. 支持 C++ 20 和 CUDA 11
CMake 3.22 在编译器特性支持方面也进行了增强,特别是对 C++ 20 标准和 CUDA 11 的支持。这一版本增加了对 C++ 20 特性检测的改进,确保开发者可以充分利用最新的 C++ 标准特性。此外,CMake 3.22 还提供了对 CUDA 11 新功能的支持,使得在 NVIDIA GPU 上的并行计算开发更加便捷。

4. FetchContent 模块的增强
FetchContent 模块在 CMake 3.22 中得到了改进,增加了对更多选项和参数的支持。FetchContent 允许开发者从远程资源中获取并构建依赖项,这一增强使得依赖管理更加灵活,特别是对于那些需要处理多个外部库的大型项目,显著提高了构建效率。

5. 改进的交叉编译支持
CMake 3.22 进一步改进了交叉编译的支持,特别是在处理不同平台和架构时表现更好。新版本提供了更加灵活的工具链文件配置选项,使得在复杂的交叉编译场景中,开发者可以更加容易地指定编译器、链接器等工具链参数,减少了手动配置的复杂性。

6. 支持 Android NDK r23
在移动平台开发方面,CMake 3.22 增加了对 Android NDK r23 的支持。开发者可以利用最新的 Android NDK 进行构建,享受更好的性能优化和兼容性支持。这一改进对于开发跨平台移动应用的团队来说非常重要。

7. add_custom_command 的改进
CMake 3.22 对 add_custom_command 命令进行了进一步优化,增加了对更多依赖管理选项的支持。通过这些改进,开发者可以更好地控制自定义命令的执行顺序和条件,确保复杂构建流程中的任务能够按预期顺利进行。

8. Find 模块的更新
CMake 3.22 对多个 Find 模块进行了更新,特别是对 Python 和 Boost 的支持得到了优化。这些改进使得 CMake 在查找和配置外部库时更加高效和可靠,减少了开发者在依赖管理上的困扰。

9. 改进的 CTest 测试功能
CMake 3.22 继续优化了 CTest 测试框架,新增了对分布式测试和并行测试的支持。这一增强使得开发者可以在大规模项目中更高效地执行自动化测试,缩短测试时间,同时确保测试结果的可靠性。

10. 性能提升和错误修复
CMake 3.22 通过一系列性能优化,进一步减少了构建时间,特别是在处理大型项目和复杂依赖时表现尤为明显。此外,新版本还修复了多个已知问题,提升了整体的稳定性和可靠性,为开发者提供了更顺畅的构建体验。

🌻3.代码实例

🐓3.1. CMAKE_POLICY_DEFAULT_CMP0126

  • 功能描述: 在 CMake 3.22 中引入了 CMAKE_POLICY_DEFAULT_CMP0126,它允许设置特定策略的默认行为,而不必在每个项目中单独设置。这对于团队和企业级项目管理非常有用。
  • 文件例子:
    # CMakeLists.txt
    cmake_minimum_required(VERSION 3.22)
    project(PolicyExample)
    
    # 设置默认策略行为
    set(CMAKE_POLICY_DEFAULT_CMP0126 NEW)
    
    add_executable(MyApp main.cpp)
    

🐓3.2. 增强的 Apple Silicon 支持

  • 功能描述: CMake 3.22 改进了对 Apple Silicon (ARM64) 架构的支持,尤其是为 macOS 11+ 提供了更好的兼容性和性能优化。
  • 文件例子:
    # CMakeLists.txt
    cmake_minimum_required(VERSION 3.22)
    project(AppleSiliconExample)
    
    # 为 Apple Silicon 平台配置
    set(CMAKE_OSX_ARCHITECTURES "arm64")
    
    add_executable(MyApp main.cpp)
    

🐓3.3. 对 Intel OneAPI 编译器的支持

  • 功能描述: CMake 3.22 新增了对 Intel OneAPI 编译器的支持,这使得 Intel 平台的高性能计算项目能够更好地集成和管理。
  • 文件例子:
    # CMakeLists.txt
    cmake_minimum_required(VERSION 3.22)
    project(IntelOneAPIExample)
    
    # 使用 Intel OneAPI 编译器
    set(CMAKE_C_COMPILER icx)
    set(CMAKE_CXX_COMPILER icpx)
    
    add_executable(MyApp main.cpp)
    

🐓3.4. 增强的 target_link_options

  • 功能描述: CMake 3.22 增强了 target_link_options 命令的功能,允许更灵活地管理链接器选项,尤其是在处理复杂的依赖关系时更加得心应手。
  • 文件例子:
    # CMakeLists.txt
    cmake_minimum_required(VERSION 3.22)
    project(LinkOptionsExample)
    
    add_executable(MyApp main.cpp)
    
    # 添加链接器选项
    target_link_options(MyApp PRIVATE "-Wl,--as-needed")
    

🐓3.5. find_package 命令中的 REQUIRED_VERSION 支持

  • 功能描述: CMake 3.22 为 find_package 命令新增了 REQUIRED_VERSION 参数,允许指定最低的兼容库版本。这有助于确保项目中的依赖库符合最低要求。
  • 文件例子:
    # CMakeLists.txt
    cmake_minimum_required(VERSION 3.22)
    project(FindPackageExample)
    
    find_package(ZLIB REQUIRED_VERSION 1.2)
    
    add_executable(MyApp main.cpp)
    target_link_libraries(MyApp ZLIB::ZLIB)
    

🐓3.6. 增强的 ctest 支持

  • 功能描述: CMake 3.22 中增强了 ctest,引入了新的测试选项和并行测试支持,尤其是在管理大规模测试套件时更为便捷。
  • 文件例子:
    # 运行测试并显示时间统计信息
    ctest --verbose --progress
    

🐓3.7. 对 Ninja Multi-Config 的改进

  • 功能描述: CMake 3.22 进一步改进了对 Ninja Multi-Config 生成器的支持,允许更灵活地处理多配置项目,尤其是在 CI/CD 管道中。
  • 文件例子:
    # CMakeLists.txt
    cmake_minimum_required(VERSION 3.22)
    project(MultiConfigExample)
    
    set(CMAKE_CONFIGURATION_TYPES "Debug;Release")
    
    add_executable(MyApp main.cpp)
    

🐓3.8. cmake --install 的增强

  • 功能描述: 在 CMake 3.22 中,cmake --install 命令得到了增强,允许更精细地控制安装目标,并且新增了对 DESTDIR 的支持。
  • 文件例子:
    cmake --install . --prefix /usr/local --component MyComponent
    

🐓3.9. 生成器表达式中的增强支持

  • 功能描述: CMake 3.22 进一步增强了生成器表达式,支持更多的条件判断和配置选项,特别是在处理复杂的构建逻辑时非常实用。
  • 文件例子:
    # CMakeLists.txt
    cmake_minimum_required(VERSION 3.22)
    project(GeneratorExpressionsExample)
    
    add_executable(MyApp main.cpp)
    
    # 使用生成器表达式设置编译选项
    target_compile_options(MyApp PRIVATE $<$<CONFIG:Debug>:-g> $<$<CONFIG:Release>:-O3>)
    

🐓3.10. 增强的工具链文件支持

  • 功能描述: CMake 3.22 进一步增强了工具链文件的支持,特别是在跨平台开发中允许更灵活地指定编译器和构建工具链。
  • 文件例子:
     # Toolchain 文件 (my_toolchain.cmake)
     set(CMAKE_SYSTEM_NAME Linux)
     set(CMAKE_C_COMPILER /path/to/compiler/gcc)
     set(CMAKE_CXX_COMPILER /path/to/compiler/g++)

     # CMakeLists.txt
     cmake_minimum_required(VERSION 3.22)
     project(ToolchainExample)

     add_executable(MyApp main.cpp)
     
     使用工具链文件进行构建:
     cmake -DCMAKE_TOOLCHAIN_FILE=my_toolchain.cmake .
     ```


http://www.kler.cn/a/302003.html

相关文章:

  • Shell基础2
  • CSS基础知识01
  • 软件设计师 - 第1章 计算机网络概论
  • vue 获取摄像头拍照,并旋转、裁剪生成新的图片
  • 政务数据治理专栏开搞!
  • Oracle19C AWR报告分析之Instance Efficiency Percentages (Target 100%)
  • 小众创新组合!LightGBM+BO-Transformer-LSTM多变量回归交通流量预测(Matlab)
  • 计算两个数据集之间的皮尔森相关系数与其p值 scipy.stats.pearsonr()
  • 解决 Ubuntu 20.04 上 Fail2Ban 启动失败问题:指定 systemd 后端
  • nnunet报错 the direction does not match between the images
  • STM32-HAL库开发快速入门
  • React基础
  • [001-02-001]. 第07-03节:理解线程的安全问题
  • 空间物联网中的大规模接入:挑战、机遇和未来方向
  • 基于 onsemi NCV78343 NCV78964的汽车矩阵式大灯方案
  • Linux下进程间的通信--共享内存
  • 计算机视觉的应用33-基于双向LSTM和注意力机制融合模型的车辆轨迹预测应用实战
  • 五分钟让你学会threeJS
  • git 远程分支同步本地落后的有冲突的分支
  • Redis常用操作及springboot整合redis
  • web基础之文件上传
  • Kotlin 中的 `flatMap` 方法详解
  • wifiip地址可以随便改吗?wifi的ip地址怎么改变
  • Brave编译指南2024 Windows篇:安装Git(四)
  • FloodFill算法
  • 语言模型微调:提升语言Agent性能的新方向