简介: CSDN博客专家、《Android系统多媒体进阶实战》一书作者
新书发布:《Android系统多媒体进阶实战》🚀
优质专栏: Audio工程师进阶系列【原创干货持续更新中……】🚀
优质专栏: 多媒体系统工程师系列【原创干货持续更新中……】🚀
优质视频课程:AAOS车载系统+AOSP14系统攻城狮入门视频实战课 🚀
人生格言: 人生从来没有捷径,只有行动才是治疗恐惧和懒惰的唯一良药.
🍉🍉🍉文章目录🍉🍉🍉
- 🌻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) # 锁定文件以进行写操作```