# LearnCMake **Repository Path**: dream_zhou/LearnCMake ## Basic Information - **Project Name**: LearnCMake - **Description**: No description available - **Primary Language**: Unknown - **License**: GPL-3.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2018-06-23 - **Last Updated**: 2025-12-06 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # LearnCMake ## CMake ### bool - `true` : `1`, `ON`, `YES`, `true`, `Y` 及 `非零数` - `false` : `0`, `OFF`, `NO`, `false`, `N`, `IGNORE`, `NOTFOUND`, 空字符串, 以`NOTFOUND` 为后缀 ### 全局变量 - `BUILD_SHARED_LIBS` true: 动态库 false: 生产静态库 ### 定义变量 变量的值始终是 `string` 类型的 变量名大小写敏感 - 定义 `set(KEY VALUE)` - 取消 `unset(KEY)` - 引用变量 `${variable_name}` - 嵌套 `${outer_${inner_variable}veriable}` - 环境变量 `$ENV{VAR}` ### cmake-variables #### `PROJECT_SOURCE_DIR` 工程的根目录 #### `CMAKE_CURRENT_SOURCE_DIR` 当前处理的 CMakeLists.txt 所在的路径 #### `PROJECT_BINARY_DIR` 运行cmake命令的目录 通常为`${PROJECT_SOURCE_DIR}/build` #### `CMAKE_CURRENT_BINARY_DIR` target 编译目录 #### `CMAKE_CURRENT_LIST_DIR` CMakeLists.txt 的完整路径 这是当前正在处理的列表文件的目录 变量 CMAKE_CURRENT_SOURCE_DIR 和 CMAKE_CURRENT_LIST_DIR 可以指代由具有 include 命令的不同文件包括的CMake列表文件的不同目录 例如,如果目录项目中存在CMakeLists.txt并且包含以下指令 ```Cmake include(src/CMakeLists.txt) ``` 然后在处理`src/CMakeLists.txt`时,`CMAKE_CURRENT_LIST_DIR`将引用`project/src`,而`CMAKE_CURRENT_SOURCE_DIR`仍然指向外部目录项目. 当您需要找到当前正在处理的 CMakeLists.txt 文件旁边的模板文件或批处理脚本等资源文件时,CMAKE_CURRENT_LIST_DIR 会派上用场. #### `EXECUTABLE_OUTPUT_PATH` 重新定义目标二进制可执行文件的存放位置 #### `LIBRARY_OUTPUT_PATH` 重新定义目标链接库文件的存放位置 #### `CMAKE_XCODE_GENERATE_TOP_LEVEL_PROJECT_ONLY` If enabled, the Xcode generator will generate only a single Xcode project file for the topmost project() command instead of generating one for every project() command. #### `PROJECT_NAME` 返回通过 project 命令定义的项目名称 ## commands ### `project` 设置的项目名存储在 `PROJECT_NAME`, 同时指定了4个变量 `PROJECT_SOURCE_DIR`, `_SOURCE_DIR` `PROJECT_BINARY_DIR`, `_BINARY_DIR` ### `PROJECT_VERSION` `PROJECT_VERSION`, `_VERSION` `PROJECT_VERSION_MAJOR`, `_VERSION_MAJOR` `PROJECT_VERSION_MINOR`, `_VERSION_MINOR` `PROJECT_VERSION_PATCH`, `_VERSION_PATCH` `PROJECT_VERSION_TWEAK`, `_VERSION_TWEAK` ### `message` `message([] "message text" ...)` | -- mode -- |-- desc --| |(node) or NOTICE | | | STATUS | | | VERBOSE | | ### `configure_file` 文件复制到文件中,并在输入文件内容中替换`@VAR@`或`${VAR}`的变量值 ``` configure_file( [COPYONLY] [ESCAPE_QUOTES] [@ONLY] [NEWLINE_STYLE [UNIX|DOS|WIN32|LF|CRLF] ]) ``` input和output假如不指定绝对路径, 则会被默认设置为`CMAKE_CURRENT_SOURCE_DIR`和`CMAKE_CURRENT_BINARY_DIR` `COPYONLY` 只是复制文件 `ESCAPE_QUOTES` 禁止为"转义 `@ONLY `只允许替换 `@VAR@` 包裹的变量 `${VAR}` 则不会被替换; `NEWLINE_STYLE