简介: CSDN博客专家、《Android系统多媒体进阶实战》一书作者
新书发布:《Android系统多媒体进阶实战》🚀
优质专栏: Audio工程师进阶系列【原创干货持续更新中……】🚀
优质专栏: 多媒体系统工程师系列【原创干货持续更新中……】🚀
优质视频课程:AAOS车载系统+AOSP14系统攻城狮入门视频实战课 🚀
人生格言: 人生从来没有捷径,只有行动才是治疗恐惧和懒惰的唯一良药.
🍉🍉🍉文章目录🍉🍉🍉
- 🌻1.前言
- 🌻2.Cmake2.4介绍
- 🌻3.代码实例
- 🐓3.1. 支持 "out-of-source" 构建
- 🐓3.2. 更好的 Find 模块支持
- 🐓3.3. 改进的内置变量和函数支持
- 🐓3.4. 引入 ADD_CUSTOM_COMMAND 和 ADD_CUSTOM_TARGET
- 🐓3.5. 改进了 CTest 测试框架
- 🐓3.6. 支持构建多个输出目标
🌻1.前言
本篇目的:Cmake之2.4版本重要特性及用法实例
🌻2.Cmake2.4介绍
CMake 2.4 版本发布于 2006 年,是 CMake 系列中的一个里程碑版本。与前一个版本相比,CMake 2.4 引入了众多新特性和改进,极大地提升了其在复杂项目中的实用性和易用性。以下是 CMake 2.4 版本的重要特性:
1. 增强的跨平台支持
CMake 2.4 进一步扩展了其跨平台能力,尤其是在处理不同编译器和操作系统方面。它为更多的编译器和 IDE 提供了更好的支持,如 Eclipse、Code::Blocks 等。这使得开发者在各种开发环境中更轻松地集成 CMake,进一步增强了其通用性。
2. 改进的依赖管理
CMake 2.4 在依赖管理方面进行了显著改进,引入了更强大的模块查找机制。通过改进 FindPackage
和新增的 FindXXX
模块,CMake 2.4 使得库和依赖项的自动检测和配置更加可靠。开发者可以更方便地处理第三方库的链接和使用,减少了手动配置的复杂性。
3. 支持导出构建目标
CMake 2.4 引入了导出构建目标的功能,使得库的接口可以被更好地管理和重用。开发者可以通过 install(EXPORT)
命令将项目的构建目标导出为其他项目所使用。这一特性特别适用于开发库和框架,因为它简化了库的发布和重用流程。
4. 支持构建目录中的“out-of-source”构建
在 CMake 2.4 中,支持和推广了“out-of-source”构建方式,即将生成的构建文件(如 Makefile、编译输出等)放在项目源代码目录之外。这一特性能够有效地保持源代码目录的整洁,减少因编译而产生的临时文件对源代码的影响,便于版本控制管理。
5. 引入脚本模式和命令行增强
CMake 2.4 增强了其脚本模式,允许开发者通过命令行执行更复杂的构建配置任务。新增的命令行选项使得用户能够更灵活地定义和控制构建过程,例如可以使用 cmake -E
命令执行文件操作和其他辅助任务。这提高了 CMake 在自动化构建脚本中的可用性。
6. CTest 和 CDash 集成
CMake 2.4 版本加强了与 CTest 和 CDash 的集成。CTest 是 CMake 自带的测试框架,而 CDash 是一个持续集成仪表盘工具。通过这两个工具的结合,开发者可以自动化运行测试并将结果上传至 CDash,进行可视化展示和分析。这一特性对大规模项目的持续集成和质量控制至关重要。
7. 改进的文档生成工具(Doxygen 支持)
CMake 2.4 开始更好地支持 Doxygen,这是一款广泛使用的文档生成工具。通过整合 Doxygen,开发者可以在 CMake 项目中更容易地生成项目文档,使文档生成过程与项目构建过程紧密结合,有助于保持文档的及时更新。
8. 性能优化与稳定性提升
CMake 2.4 对核心功能进行了优化,提升了整体性能,尤其是在处理大型项目时更加高效。同时,CMake 2.4 修复了许多 bug,提升了构建过程的稳定性。性能的提升和稳定性的增强使得 CMake 能够更加胜任复杂项目的构建需求。
🌻3.代码实例
CMake 2.4 版本发布于 2006 年,为构建系统引入了许多新的特性和改进。以下是 CMake 2.4 版本中的关键特性及每个功能的文件示例:
🐓3.1. 支持 “out-of-source” 构建
- 功能描述: CMake 2.4 强调并支持 “out-of-source” 构建模式,这种模式将构建文件与源代码分离,使得源目录更加干净,并允许同时进行多个构建配置(如调试和发布)。
- 文件例子:
# 创建构建目录并在其中运行 CMake mkdir build cd build cmake ../ make
🐓3.2. 更好的 Find 模块支持
- 功能描述: CMake 2.4 对
FindXXX.cmake
模块进行了改进,这些模块用于查找系统中的库和工具。通过改进,CMake 可以更准确地找到依赖项,并且支持更多的第三方库。 - 文件例子:
# CMakeLists.txt project(FindLibraryExample) find_package(Boost REQUIRED) add_executable(App main.cpp) target_link_libraries(App ${Boost_LIBRARIES})
🐓3.3. 改进的内置变量和函数支持
- 功能描述: CMake 2.4 引入了更多的内置变量和函数,扩展了 CMake 脚本的功能。新变量和函数使开发者能够更加灵活地配置项目,例如控制编译选项、设置目标属性等。
- 文件例子:
# CMakeLists.txt project(AdvancedVariables) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra") add_executable(AdvancedApp main.cpp)
🐓3.4. 引入 ADD_CUSTOM_COMMAND 和 ADD_CUSTOM_TARGET
- 功能描述: CMake 2.4 引入了
ADD_CUSTOM_COMMAND
和ADD_CUSTOM_TARGET
,允许开发者自定义构建过程。例如,可以在构建过程中自动生成代码或执行其他自定义操作。 - 文件例子:
# CMakeLists.txt project(CustomCommandsExample)# 自定义命令生成文件 add_custom_command(OUTPUT generated_file.cppCOMMAND echo "int main() { return 0; }" > generated_file.cppDEPENDS input.txt )# 自定义目标依赖该文件 add_custom_target(GenerateFile ALL DEPENDS generated_file.cpp)add_executable(App generated_file.cpp)
🐓3.5. 改进了 CTest 测试框架
- 功能描述: CMake 2.4 对 CTest 测试框架进行了改进,增加了更好的测试支持和报告功能。现在开发者可以更好地集成自动化测试,并生成详细的测试报告。
- 文件例子:
运行测试的命令:# CMakeLists.txt project(CTestExample) add_executable(TestApp main.cpp)enable_testing() add_test(NAME SimpleTest COMMAND TestApp)# 添加测试报告配置 set(CTEST_OUTPUT_ON_FAILURE TRUE)
ctest
🐓3.6. 支持构建多个输出目标
- 功能描述: CMake 2.4 支持单个构建过程中生成多个输出目标,例如构建多个可执行文件或库。通过
ADD_LIBRARY
和ADD_EXECUTABLE
,开发者可以在同一个项目中定义多个目标。 - 文件例子:
# CMakeLists.txt project(MultiTargetExample) add_library(MyLib lib.cpp) add_executable(App main.cpp) target_link_libraries(App MyLib)