在本博客中,我们将继续介绍CMake中的一些常用变量和语法说明,以帮助您更好地理解和使用CMake。
CMake变量查询网站:
https://gitlab.kitware.com/cmake/community/wikis/doc/cmake/Useful-Variables
简单说明
- 引用变量内容需要用${变量名}格式
可以使用message命令查看变量具体内容
message(STATUS "The CMAKE\_VERSION is \${CMAKE\_VERSION}")
message(STATUS "The CMAKE\_SOURCE\_DIR is \${CMAKE\_SOURCE\_DIR}")
- 可以在CMakeLists.txt文件中使用set命令设置某些变量值
如
set(CMAKE\_BUILD\_TYPE "Release")
- 可以通过cmake命令行参数设置变量值
如
cmake -DCMAKE\_BUILD\_TYPE=Release
,这种方式会被CMakeLists.txt中set命令设置的变量值覆盖.
常用内置变量
变量名 | 含义 |
PROJECT_NAME | project命令中写的项目名 |
CMAKE_VERSION | 当前使用CMake的版本 |
CMAKE_SOURCE_DIR | 工程顶层目录,即入口CMakeLists文件所在路径 |
PROJECT_SOURCE_DIR | 同CMAKE_SOURCE_DIR |
CMAKE_BINARY_DIR | 工程编译发生的目录,即执行cmake命令进行项目配置的目录,一般为build |
PROJECT_BINARY_DIR | 同CMAKE_BINARY_DIR |
CMAKE_CURRENT_SOURCE_DIR | 当前处理的CMakeLists.txt所在的路径 |
CMAKE_CURRRENT_BINARY_DIR | 当前处理的CMakeLists.txt中生成目标文件所在编译目录 |
CMAKE_CURRENT_LIST_FILE | 输出调用这个变量的CMakeLists.txt文件的完整路径 |
CMAKE_CURRENT_LIST_DIR | 当前处理的CMakeLists.txt文件所在目录的路径 |
CMAKE_INSTALL_PREFIX | 指定make install命令执行时包安装路径 |
CMAKE_MODULE_PATH | find_package命令搜索包路径之一,默认为空 |
环境变量相关
变量名 | 含义 |
CMAKE_PREFIX_PATH | 指定额外的包查找路径,可用于查找第三方库的安装目录 |
CMAKE_INCLUDE_PATH | 指定额外的头文件查找路径 |
CMAKE_LIBRARY_PATH | 指定额外的库文件查找路径 |
CMAKE_FRAMEWORK_PATH | 指定额外的框架查找路径(MacOS系统) |
依赖查找相关变量
变量名 | 含义 |
_FOUND | 根据find_package查找结果,表示是否找到指定的包 |
_INCLUDE_DIRS | find_package查找到的包的头文件目录 |
_LIBRARIES | find_package查找到的包的库文件 |
编译配置相关变量
变量名 | 含义 |
CMAKE_BUILD_TYPE | 编译选项,Release或者Debug,如set(CMAKE_BUILD_TYPE “Release”) |
CMAKE_CXX_FLAGS | 编译标志,设置C++11编译,set(CMAKE_CXX_FLAGS “${CMAKE_CXX_FLAGS} -std=c++11”) |
CMAKE_CXX_STANDARD | 也可以设置C++11编译,set(CMAKE_CXX_STANDARD 11) |
常用命令
变量名 | 含义 |
add_executable() | 定义一个可执行文件目标 |
add_library() | 定义一个库目标(静态库或动态库) |
add_subdirectory() | 添加一个子目录,子目录下需要有CMakeLists.txt文件 |
add_dependencies() | 设置目标之间的依赖关系 |
target_link_libraries() | 为目标添加链接库 |
target_include_directories() | 为目标添加头文件目录 |
find_package() | 查找包并设置相应的变量 |
include() | 包含一个CMake脚本文件 |
条件语句
CMake中支持条件语句,可以根据条件执行不同的命令。以下是一些常用的条件语句:
- if(): 如果条件成立,执行其内部的语句
- elseif(): 如果前面的if或elseif条件不成立,而这个条件成立,执行其内部的语句
- else(): 如果前面的if和elseif条件都不成立,执行其内部的语句
- endif(): 结束一个条件语句块
条件语句的常用条件判断
- EXISTS : 文件是否存在
- DEFINED : 变量是否定义
- STREQUAL : 字符串比较,是否相等
- LESS : 数字比较,小于
- GREATER : 数字比较,大于 - EQUAL : 数字比较,相等
这些变量和语法说明将帮助您更好地编写CMakeLists.txt文件,实现项目的构建和管理。通过学习和掌握CMake,您将能够更轻松地进行跨平台开发和项目维护。