欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 健康 > 养生 > Cmake之3.26版本重要特性及用法实例(二十一)

Cmake之3.26版本重要特性及用法实例(二十一)

2024/10/24 22:29:46 来源:https://blog.csdn.net/u010164190/article/details/142027768  浏览:    关键词:Cmake之3.26版本重要特性及用法实例(二十一)

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

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

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

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

欢迎关注Android系统攻城狮

🍉🍉🍉文章目录🍉🍉🍉

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

🌻1.前言

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

🌻2.Cmake之3.26版本介绍

CMake 3.26 版本发布于 2023 年初,带来了众多重要的功能改进和新特性,继续优化开发者的构建体验。以下是 CMake 3.26 版本的重要特性:

1. 新的生成器表达式改进
CMake 3.26 对生成器表达式(Generator Expressions)进行了增强,新增了 TARGET_OBJECTS 的支持,允许开发者在目标中更好地控制对象文件。通过这些改进,开发者可以更灵活地配置复杂构建,尤其是在需要精细控制构建过程的项目中,这一特性显得尤为重要。

2. 改进的 CMakePresets.json 支持
CMake 3.26 对 CMakePresets.json 文件进行了进一步改进,增加了更多配置选项和灵活性。开发者可以更方便地使用预设文件来管理构建配置,并且预设文件的结构也得到了优化,提升了在团队协作和跨平台开发中的可用性。

3. 增强的编译器支持
CMake 3.26 增强了对最新编译器版本的支持,包括对 GCC、Clang 和 MSVC 的最新特性的兼容性。这使得开发者能够更好地利用现代编译器提供的性能和功能优化,尤其是在处理新的 C++ 标准和编译器扩展时,CMake 3.26 提供了更加完整的支持。

4. 对 Fortran 的改进支持
在 CMake 3.26 中,Fortran 的支持得到了显著提升。新增了对 Fortran 子模块的支持,使得使用 Fortran 进行构建的项目能够更好地处理模块化代码结构。这一改进对科学计算和高性能计算项目尤为重要,简化了 Fortran 代码的编译和管理。

5. 增强的跨平台构建功能
CMake 3.26 继续强化其跨平台构建能力,特别是在处理 Android 和 iOS 平台时,提供了更好的工具链配置和库查找支持。通过这些改进,开发者可以更轻松地在移动设备上构建和部署应用程序,减少了配置和调试的时间。

6. target_link_options 的扩展
CMake 3.26 对 target_link_options 命令进行了扩展,增加了更多选项和条件控制。开发者可以更灵活地为不同的构建目标配置链接器选项,特别是在处理跨平台项目或复杂依赖关系时,这一功能显著提高了构建的灵活性。

7. 改进的 find_package 模块
CMake 3.26 对 find_package 模块进行了进一步优化,尤其是在查找和配置外部依赖时变得更加智能和高效。特别是在处理大型项目和多库依赖时,CMake 3.26 能够更好地处理版本冲突和路径问题,减少了手动调整的需求。

8. CTest 测试框架的增强
在测试功能方面,CMake 3.26 对 CTest 测试框架进行了进一步优化,新增了对更多测试选项的支持,尤其是在并行测试和条件测试方面进行了改进。通过这些增强,开发者能够更高效地管理和执行自动化测试,尤其是在大规模项目中,能够显著提高测试效率。

9. 改进的生成器支持
CMake 3.26 在生成器方面引入了更多优化,特别是对 Ninja 生成器的改进,使得并行构建更加高效。这些改进帮助开发者在处理复杂项目时,能够更好地利用硬件资源,加快构建速度。

10. 性能和稳定性提升
CMake 3.26 通过一系列性能优化,使得构建系统更加高效,特别是在处理大型项目和复杂依赖时,构建速度有显著提升。此外,该版本还修复了多个已知问题,进一步增强了 CMake 的稳定性和可靠性。

🌻3.代码实例

🐓3.1. 增强的 cmake -E 子命令

  • 功能描述: CMake 3.26 对 cmake -E 子命令进行了增强,特别是对文件系统操作的支持,使用户能够通过命令行工具更轻松地进行文件复制、删除等操作。
  • 文件例子:
    # 使用 cmake -E 进行文件复制
    cmake -E copy source.txt destination.txt
    

🐓3.2. 新增的 cmake_host_system_information() 命令

  • 功能描述: CMake 3.26 引入了 cmake_host_system_information() 命令,允许用户在 CMake 脚本中查询主机系统的各种信息,如内存、CPU 以及操作系统版本等。
  • 文件例子:
    # CMakeLists.txt
    cmake_minimum_required(VERSION 3.26)
    project(HostInfoExample)cmake_host_system_information(RESULT os_name QUERY OS_NAME)
    message(STATUS "Operating System: ${os_name}")
    

🐓3.3. cmake_path() 的增强功能

  • 功能描述: CMake 3.26 对 cmake_path() 命令进行了改进,增加了对路径分隔符和路径类型的处理能力,使路径操作更灵活。
  • 文件例子:
    # CMakeLists.txt
    cmake_minimum_required(VERSION 3.26)
    project(PathEnhancementsExample)set(path "/usr/local/bin")
    cmake_path(GET "${path}" ROOT_NAME root_name)
    message(STATUS "Root Name: ${root_name}")
    

🐓3.4. 对 C++23 标准的初步支持

  • 功能描述: CMake 3.26 增加了对 C++23 标准的初步支持,用户可以指定 CXX_STANDARD 为 23,以使用新标准的功能。
  • 文件例子:
    # CMakeLists.txt
    cmake_minimum_required(VERSION 3.26)
    project(Cpp23Example LANGUAGES CXX)set(CMAKE_CXX_STANDARD 23)
    add_executable(MyApp main.cpp)
    

🐓3.5. 增强的 find_package() 支持

  • 功能描述: 在 CMake 3.26 中,find_package() 命令的支持得到了进一步增强,特别是改进了包查找路径的配置选项。
  • 文件例子:
    # CMakeLists.txt
    cmake_minimum_required(VERSION 3.26)
    project(FindPackageEnhancementExample)find_package(Boost REQUIRED)
    add_executable(MyApp main.cpp)
    target_link_libraries(MyApp Boost::Boost)
    

🐓3.6. 新增的 cmake_policy() 修改

  • 功能描述: CMake 3.26 引入了新的策略,允许更细粒度地控制旧版本和新版本行为的差异,确保项目的兼容性。
  • 文件例子:
    # CMakeLists.txt
    cmake_minimum_required(VERSION 3.26)
    cmake_policy(SET CMP0123 NEW)  # 使用新策略project(PolicyExample)
    

🐓3.7. 改进的交叉编译支持

  • 功能描述: 在 CMake 3.26 中,交叉编译的支持得到了进一步增强,特别是在工具链文件的配置和管理方面,使得跨平台编译更加容易。
  • 文件例子:
    # Toolchain 文件 (cross_toolchain.cmake)
    set(CMAKE_SYSTEM_NAME Linux)
    set(CMAKE_C_COMPILER /path/to/cross-compiler/gcc)# CMakeLists.txt
    cmake_minimum_required(VERSION 3.26)
    project(CrossCompileExample)add_executable(MyApp main.cpp)
    

🐓3.8. 改进的预编译头支持

  • 功能描述: CMake 3.26 对预编译头的支持进行了改进,使得项目中的编译速度更快,尤其是在大型项目中,改进了预编译头的处理逻辑。
  • 文件例子:
    # CMakeLists.txt
    cmake_minimum_required(VERSION 3.26)
    project(PrecompiledHeaderExample LANGUAGES CXX)target_precompile_headers(MyApp PRIVATE pch.h)
    add_executable(MyApp main.cpp)
    

🐓3.9. 多配置生成器中的配置文件

  • 功能描述: CMake 3.26 增加了对多配置生成器中配置文件的支持,使得在多配置生成器环境下管理构建配置更加简便。
  • 文件例子:
    # CMakeLists.txt
    cmake_minimum_required(VERSION 3.26)
    project(MultiConfigExample)set(CMAKE_CONFIGURATION_TYPES "Debug;Release")add_executable(MyApp main.cpp)
    

🐓3.10. 新增的 file(LOCK) 支持

  • 功能描述: 在 CMake 3.26 中,新增了 file(LOCK) 命令,允许用户对文件进行锁定操作,防止并发访问冲突。
  • 文件例子:
     # CMakeLists.txtcmake_minimum_required(VERSION 3.26)project(FileLockExample)file(LOCK myfile.txt WRITE)  # 锁定文件以进行写操作```

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com