目录
CMake 的高级特性使其能够应对各种复杂的构建需求和环境。以下是针对你提到的各个方面的详细说明:
1. 自定义 CMake 模块和脚本
自定义模块
CMake 允许创建自定义模块来封装复杂数字逻辑,从而简化主 CMakeLists.txt 文件。这些模块通常是独立的脚本文件,可以包含一系列有用的函数和宏。
示例:创建自定义模块
假设我们创建一个名为 my_module.cmake
的模块,该模块包含一些常用的函数和宏:
cmake
深色版本
1# my_module.cmake
2macro(add_custom_target_with_dependencies name command dependencies)
3 add_custom_target(${name}
4 COMMAND ${command}
5 DEPENDS ${dependencies}
6 )
7endmacro()
8
9function(find_and_link_boost components)
10 find_package(Boost REQUIRED COMPONENTS ${components})
11 if (Boost_FOUND)
12 target_link_libraries(${PROJECT_NAME} Boost::${components})
13 endif()
14endfunction()
然后,在主 CMakeLists.txt
文件中包含这个模块:
cmake
深色版本
1include(my_module.cmake)
2
3add_custom_target_with_dependencies(generate_data gen_data.py data_sources)
4find_and_link_boost(system filesystem)
2. 构建配置和目标
多配置生成器
CMake 支持多配置生成器,如 Visual Studio 和 Xcode,它们允许同时生成多个配置(如 Debug 和 Release)的构建文件。
示例:使用 Visual Studio 生成器
bash
深色版本
1cmake -G "Visual Studio 17 2022" -A x64 ..
定义多个构建目标
CMake 允许在一个项目中定义多个目标,如可执行文件、库等,并可以根据需要进行组合。
示例:定义多个目标
cmake
深色版本
1add_executable(app1 main.cpp)
2add_library(lib1 SHARED lib1.cpp)
3target_link_libraries(app1 lib1)