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,您将能够更轻松地进行跨平台开发和项目维护。


目录
相关文章
|
Python
pycharm使用debug的时候遇到断点不停的问题
pycharm使用debug的时候遇到断点不停的问题
1470 0
|
Kubernetes 安全 Java
2021年 最新 多阶段构建dockerfile实现java源码编译打jar包并做成镜像
多阶段构建指在Dockerfile中使用多个FROM语句,每个FROM指令都可以使用不同的基础镜像,并且是一个独立的子构建阶段。使用多阶段构建打包Java应用具有构建安全、构建速度快、镜像文件体积小等优点.
1884 0
2021年 最新 多阶段构建dockerfile实现java源码编译打jar包并做成镜像
|
前端开发 Java 数据库
基于SpringBoot的生鲜交易系统
基于SpringBoot的生鲜交易系统
|
Java 关系型数据库 MySQL
Spring Boot实现第一次启动时自动初始化数据库
在现在的后端开发中,只要是使用关系型数据库,相信SSM架构(Spring Boot + MyBatis)已经成为首选。 不过在我们第一次运行或者部署项目的时候,通常要先手动连接数据库,执行一个SQL文件以创建数据库以及数据库表格完成数据库的初始化工作,这样我们的SSM应用程序才能够正常工作。 这样也对实际部署或者是容器化造成了一些麻烦,必须先手动初始化数据库再启动应用程序。 那能不能让我们的SSM应用程序第一次启动时,自动地帮我们执行SQL文件以完成数据库初始化工作呢? 这样事实上是没问题的,今天就以Spring Boot + MyBatis为例,使用MySQL作为数据库,完成上述的数
|
Windows
DOS - 批处理之 for /f 中的 delims 和 tokens
DOS - 批处理之 for /f 中的 delims 和 tokens
1466 0
DOS - 批处理之 for /f 中的 delims 和 tokens
|
存储 缓存 NoSQL
【赵渝强老师】MongoDB的WiredTiger存储引擎
MongoDB WiredTiger存储引擎自3.2版本起成为默认选择,提供文档级别的并发控制、检查点、数据压缩和本地加密等功能。本文详细介绍了WiredTiger的并发控制机制、预写日志与检查点、内存使用、数据压缩及磁盘空间回收等特性。
626 0
|
JSON 测试技术 C#
C#/.NET/.NET Core优秀项目框架推荐榜单
C#/.NET/.NET Core优秀项目框架推荐榜单
939 0
|
机器学习/深度学习 监控 API
基于云计算的机器学习模型部署与优化
【8月更文第17天】随着云计算技术的发展,越来越多的数据科学家和工程师开始使用云平台来部署和优化机器学习模型。本文将介绍如何在主要的云计算平台上部署机器学习模型,并讨论模型优化策略,如模型压缩、超参数调优以及分布式训练。
1822 2
怎样设置邮件过滤?提升工作效率的必杀技
电子邮件过滤是一种智能化的管理工具,能自动分类邮件,屏蔽垃圾信息,优先显示重要邮件。设置过滤器通常包括指定关键词、发件人或域名,以便自动归档、删除或转发邮件。以Zoho Mail为例,用户可以通过进入设置,选择过滤器,然后新建规则来设定邮件处理方式。邮件过滤提高了效率,但需定期检查规则避免误删重要邮件。可以创建多个规则,并在更换邮箱服务商时重新设置过滤规则。
424 0
教你设置dsn,brd文件关联到cadence
教你设置dsn,brd文件关联到cadence
1189 0