简介: CSDN博客专家、《Android系统多媒体进阶实战》一书作者
新书发布:《Android系统多媒体进阶实战》🚀
优质专栏: Audio工程师进阶系列【原创干货持续更新中……】🚀
优质专栏: 多媒体系统工程师系列【原创干货持续更新中……】🚀
优质视频课程:AAOS车载系统+AOSP14系统攻城狮入门视频实战课 🚀
人生格言: 人生从来没有捷径,只有行动才是治疗恐惧和懒惰的唯一良药.
🍉🍉🍉文章目录🍉🍉🍉
🌻1.前言
本篇目的:Cmake之3.15版本重要特性及用法实例
🌻2.Cmake之3.15版本介绍
CMake 3.15 版本发布于 2019 年,是 CMake 系列的一个重要更新,带来了许多新特性和改进,进一步提升了构建系统的功能和用户体验。以下是 CMake 3.15 版本的重要特性:
1. 增强的预设功能
CMake 3.15 引入了对构建预设的支持,可以通过 CMakePresets.json
文件定义多个构建配置。这一特性允许开发者为不同的构建环境和配置创建预设,使得项目的配置和构建更加高效和一致。预设功能为开发团队提供了一种共享标准构建配置的便捷方式,减少了手动配置的工作量。
2. 支持 file(GENERATE)
命令
CMake 3.15 新增了 file(GENERATE)
命令,它允许开发者在配置阶段生成文件。这个特性可以用来生成配置文件、头文件或其他需要动态生成的文件,使得 CMake 脚本的可编程性和灵活性大大提升。这一命令的引入使得开发者能够更精确地控制文件生成的时机和内容。
3. 支持 NVIDIA CUDA Clang 编译器
CMake 3.15 扩展了对 CUDA 的支持,增加了对 NVIDIA CUDA Clang 编译器的原生支持。这一更新为开发者提供了更多选择,尤其是在需要使用 Clang 编译器的 CUDA 项目中。开发者可以通过简单的配置,利用 Clang 编译 CUDA 代码,并与其他 C++ 代码无缝集成。
4. target_link_options
命令
CMake 3.15 引入了 target_link_options
命令,使开发者可以为特定目标设置链接选项。这一功能允许更精细地控制链接器行为,避免了全局设置链接器选项导致的冲突或不必要的设置。通过 target_link_options
,开发者可以在项目中更灵活地配置链接器参数,提高了构建过程的可定制性。
5. 支持 Unity Build 配置
CMake 3.15 增强了对 Unity Build 的支持,允许通过设置目标属性来启用或禁用 Unity Build 配置。这种构建模式可以显著减少大项目的编译时间,特别是在有大量源文件的情况下。通过更加灵活的 Unity Build 配置选项,开发者可以更轻松地优化构建时间。
6. 改进的 Find 模块
CMake 3.15 继续优化和扩展了 Find 模块,尤其是在查找外部库和工具链时的表现更加可靠和高效。新版本中,Find 模块能够更好地处理库版本控制、路径检测等问题,减少了手动配置的复杂性。对于依赖大量第三方库的项目,这一改进显著提升了构建体验。
7. 支持 Visual Studio 2019
CMake 3.15 提供了对 Visual Studio 2019 的原生支持,使得使用最新 Visual Studio IDE 的开发者可以直接生成项目文件。该版本确保了与 Visual Studio 2019 的兼容性,支持开发者在最新的开发环境中无缝集成 CMake,并利用 IDE 的新特性和优化。
8. 改进的 CTest
测试功能
CMake 3.15 对 CTest
测试框架进行了增强,特别是在处理并行测试和分布式测试方面。新增的测试选项和报告功能,使得开发者能够更好地监控测试状态和性能,并在 CI 环境中更高效地执行自动化测试。
9. 性能优化和错误修复
CMake 3.15 继续对整体性能进行优化,尤其是在大型项目和复杂依赖的情况下,配置和构建时间有所缩短。此外,这个版本修复了多个已知问题,提升了 CMake 的稳定性,减少了开发者在使用过程中的困扰。
🌻3.代码实例
🐓3.1. cmake --install
命令
- 功能描述: CMake 3.15 引入了
cmake --install
命令,提供了一种标准化的方式来安装构建项目,简化了构建和部署的过程。 - 文件例子:
# 构建项目 cmake --build . --config Release # 安装项目 cmake --install .
🐓3.2. target_link_options
命令
- 功能描述: 新增的
target_link_options
命令允许在目标的链接阶段添加链接选项。这为目标的链接配置提供了更大的灵活性。 - 文件例子:
# CMakeLists.txt project(LinkOptionsExample) add_executable(MyApp main.cpp) # 添加链接选项 target_link_options(MyApp PRIVATE -Wl,--no-as-needed)
🐓3.3. FetchContent
模块改进
- 功能描述:
FetchContent
模块得到增强,使得拉取和管理外部项目更加方便,特别是在使用第三方库时。 - 文件例子:
# CMakeLists.txt include(FetchContent) # 拉取外部项目 FetchContent_Declare( googletest GIT_REPOSITORY https://github.com/google/googletest.git GIT_TAG release-1.10.0 ) FetchContent_MakeAvailable(googletest) add_executable(MyApp main.cpp) target_link_libraries(MyApp gtest_main)
🐓3.4. 增强的 find_package
支持
- 功能描述: CMake 3.15 进一步改进了
find_package
命令,允许更灵活地查找和配置依赖项,尤其是对版本控制和组件的支持。 - 文件例子:
# CMakeLists.txt project(FindPackageExample) find_package(Boost 1.70 REQUIRED COMPONENTS filesystem) add_executable(MyApp main.cpp) target_link_libraries(MyApp Boost::filesystem)
🐓3.5. 支持 Apple 的 Xcode 11 IDE
- 功能描述: CMake 3.15 引入了对 Apple Xcode 11 的支持,能够更好地集成 iOS 和 macOS 项目的开发。
- 文件例子:
# CMakeLists.txt project(XcodeExample) add_executable(MyApp main.cpp) # 使用 Xcode 生成器 cmake -G Xcode .
🐓3.6. install()
命令的新选项
- 功能描述: CMake 3.15 对
install()
命令进行了增强,支持更多安装选项,包括EXCLUDE_FROM_ALL
和COMPONENTS
的支持。 - 文件例子:
# CMakeLists.txt project(InstallExample) add_executable(MyApp main.cpp) # 安装可执行文件并排除某些文件 install(TARGETS MyApp EXCLUDE_FROM_ALL)
🐓3.7. CMAKE_TOOLCHAIN_FILE
的增强支持
- 功能描述: 对
CMAKE_TOOLCHAIN_FILE
的支持进一步增强,使得跨平台和交叉编译的配置更加简便。 - 文件例子:
使用工具链文件进行构建:# Toolchain 文件 (arm-toolchain.cmake) set(CMAKE_SYSTEM_NAME Linux) set(CMAKE_SYSTEM_PROCESSOR arm) set(CMAKE_C_COMPILER arm-linux-gnueabi-gcc) set(CMAKE_CXX_COMPILER arm-linux-gnueabi-g++) # CMakeLists.txt project(CrossCompileExample) add_executable(MyApp main.cpp)
cmake -DCMAKE_TOOLCHAIN_FILE=arm-toolchain.cmake .
🐓3.8. target_precompile_headers
命令
- 功能描述: CMake 3.15 引入了
target_precompile_headers
命令,允许为目标指定预编译头文件,提高了构建效率。 - 文件例子:
# CMakeLists.txt project(PrecompileHeadersExample) add_executable(MyApp main.cpp) # 指定预编译头文件 target_precompile_headers(MyApp PRIVATE precompiled.h)
- CTest 支持测试资源管理
- 功能描述: CMake 3.15 为 CTest 引入了资源管理功能,可以在并行测试时更好地管理测试资源。
- 文件例子:
# 使用资源管理并行测试 ctest --resource-spec-file my_resource_spec.json --parallel 4
🐓3.10. 改进的生成器表达式
- 功能描述: 生成器表达式在 CMake 3.15 中得到了进一步增强,提供了更灵活的构建配置选项。
- 文件例子:
# CMakeLists.txt
project(GeneratorExpressionsExample)
add_executable(MyApp main.cpp)
# 动态设置编译选项
target_compile_options(MyApp PRIVATE $<$<CONFIG:Debug>:-g> $<$<CONFIG:Release>:-O2>)
```