CMake基础:CMake中的常用变量的命令

简介: CMake基础:CMake中的常用变量的命令

在本博客中,我们将继续介绍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,您将能够更轻松地进行跨平台开发和项目维护。


目录
相关文章
|
7月前
|
存储 缓存 编译器
【CMake 命令相关知识】深入理解 CMake命令中的 内置缓存变量
【CMake 命令相关知识】深入理解 CMake命令中的 内置缓存变量
143 0
|
7月前
|
存储 缓存 安全
【cmake 生成配置文件】CMake与现代C++:配置文件宏的深度探索与应用
【cmake 生成配置文件】CMake与现代C++:配置文件宏的深度探索与应用
276 0
|
7月前
|
C语言 Windows
使用CMake调用Makefile 项目
使用CMake调用Makefile 项目
115 0
|
7月前
|
Unix C++
在VS2019中CMake生成出现报错
在VS2019中CMake生成出现报错
774 0
在VS2019中CMake生成出现报错
|
7月前
|
IDE Java Linux
【CMake】CMake构建C++代码(一)
【CMake】CMake构建C++代码(一)
|
7月前
|
存储 自然语言处理 Linux
CMake基础(1)初识CMake
CMake基础(1)初识CMake
58 0
|
4月前
onnxruntime cmake配置
onnxruntime cmake配置
79 2
|
4月前
clion中cmake配置含义
clion中cmake配置含义
115 0
|
7月前
|
存储 缓存 算法
【Cmake 增加编译参数 】cmake增加编译参数和预处理指令的几种方法
【Cmake 增加编译参数 】cmake增加编译参数和预处理指令的几种方法
313 1
|
7月前
CMake中FindPackageHandleStandardArgs.cmake文件的作用和用法
CMake中FindPackageHandleStandardArgs.cmake文件的作用和用法
165 2