注:根据已有的CmakeList.txt资源,学习变量和命令。
资源文件:https://download.csdn.net/download/m0_56066265/91435132?spm=1001.2101.3001.9500
CMAKE的变量名和含义:
| 变量 |
含义 |
用途 |
| CMAKE_CURRENT_SOURCE_DIR |
当前 CMakeLists.txt 文件 所在的目录(不适用于 .cmake 文件) |
当 CMake 处理嵌套的 CMakeLists.txt(如通过 add_subdirectory())时,CMAKE_CURRENT_SOURCE_DIR 的值会自动切换到当前子目录的路径。 |
| CMAKE_CURRENT_LIST_DIR |
当前正在处理的 CMake 文件所在的目录路径,核心作用是 动态定位当前脚本文件的位置,方便在 CMake 项目中引用同级或子目录下的文件 |
例如,如果该命令写在 /project/src/CMakeLists.txt 中,则 ${CMAKE_CURRENT_LIST_DIR} 为 /project/src,区别:用 CMAKE_CURRENT_LIST_DIR 定位脚本位置,用 CMAKE_CURRENT_SOURCE_DIR 定位 CMakeLists.txt 位置。 |
| CMAKE_SOURCE_DIR |
项目根目录(顶层 CMakeLists.txt 的目录) |
/project |
| CMAKE_BINARY_DIR |
顶层构建目录(即运行 cmake 的目录) |
/project/build |
| CMAKE_CURRENT_BINARY_DIR |
当前 CMakeLists.txt 对应的构建目录(与源码目录结构一致) |
/project/build/src |
| CMAKE_MODULE_PATH |
用于扩展 CMake 的模块搜索路径,方便加载自定义或第三方 .cmake 脚本 |
仅影响 include() 和 find_package() 的模块搜索路径(.cmake 文件) |
| CMAKE_PREFIX_PATH |
用于指定 CMake 在查找依赖库、头文件或工具链时的根目录 |
影响所有 find_* 命令(如 find_package()、find_library()、find_path() 等) |
| CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT |
用于指示 默认安装前缀(install prefix)是否被初始化过 |
当 CMake 首次运行时,如果没有显式指定CMAKE_INSTALL_PREFIX,CMake 会将其初始化为默认路径(如 /usr/local 或 C:/Program Files)。如果用户显式指定了 CMAKE_INSTALL_PREFIX,则该变量为 FALSE。 |
| BUILD_SHARED_LIBS |
用于控制是否将库(add_library() 创建的库)默认编译为动态库(shared library) 还是 静态库(static library) |
当 BUILD_SHARED_LIBS=ON 时,add_library() 默认生成 动态库(.so / .dll / .dylib) |
| CMAKE_SIZEOF_VOID_P |
用于检测目标系统的指针大小(以字节为单位)。 |
它的值直接反映了当前编译环境的架构是 32 位还是 64 位 |
| CMAKE_C_FLAGS |
是 CMake 中用来设置 C 编译器(如 gcc、clang、MSVC)的全局编译选项 的变量 |
通过修改 CMAKE_C_FLAGS,可以全局控制 C 代码的编译行为(如优化级别、警告选项、宏定义等)。它会影响所有通过 add_executable() 或 add_library() 创建的 C 目标(除非目标单独覆盖了编译选项)。 |
| BUILD_TESTS |
控制是否构建项目的测试代码(如单元测试、集成测试) |
它通常通过 option() 命令定义,允许用户在配置阶段(cmake 命令执行时)决定是否启用测试构建 |
# 方法1:直接设置(覆盖原有值)
set(CMAKE_PREFIX_PATH "/path/to/your/libs")
# 方法2:追加路径(推荐,避免覆盖系统默认路径)
list(APPEND CMAKE_PREFIX_PATH "/path/to/your/libs")
Cmake的命令
| 命令 |
含义 |
用途 |
| find_package() |
用于在构建过程中查找和加载外部依赖库(第三方库或系统库) |
让 CMake 自动找到所需的库,并设置相关的变量(如头文件路径、库文件路径等);优先在 CMAKE_PREFIX_PATH 指定的路径下查找依赖 |
| message() |
打印消息 |
类似QT的debug,python的printf |
| include() |
主要作用是将外部 CMake 代码引入当前作用域,用于 引入 CMake 脚本 |
1. 引入其他 CMake 脚本文件;2. 使用 CMake 内置模块;3. 引入第三方 CMake 模块; |
| option() |
用于定义一个 用户可配置的布尔选项,允许用户在配置阶段(cmake 命令运行时)通过命令行参数 (-D) 来启用或禁用该选项 |
提供一种灵活的方式,让用户决定是否启用某些功能(例如编译测试、启用调试日志等) |
| add_library() |
CMake 构建系统中用于定义库(静态库或动态库)的一个关键命令 |
将指定的源文件编译成一个库文件,供其他目标(如可执行文件或其他库)链接使用 |
| file(GLOB …) |
收集源文件 |