关于CMAKE系统内置的变量,可以在此查看:https://cmake.org/cmake/help/latest/manual/cmake-variables.7.html

一、CMake变量

变量是CMake语言的最基本的存储单元。变量的值始终为字符串类型,尽管一些命令将会将其理解为其他类型的值。命令set()unset()用于显式地设置或重置一个变量,其他命令有可能改变变量的语义。变量名是区分大小写、可以是几乎所有的文本类型,但是我们还是建议大家命名只是用加(+)、减(-)和点划线(-.)。变量可以通过setunset的选项设置不一样的范围:

  • 函数范围
  • 目录范围
  • 永久缓存

如何打印一个变量?使用message函数,分为三个消息类型:FATAL_ERROR(致命错误) WARNING(警告) STATUS(正常)

message(WARNING "OpenCV requires Android SDK tools revision 14 or newer.")

二、设置一个普通变量(Set Normal Variable)

通过命令Set可一个普通、缓存和环境变量的值。语法格式:

set(<variable> <value>... [PARENT_SCOPE])

<value>...这一部分可以是零个以上的值,也就是意味着可以为空。多个参数将以分号分隔的列表形式连接,以形成要设置的实际变量值。如果值为空,那么等价于unset

访问一个值,格式${<variable>} 。不太理解为什么CMake变量设置简单(不用带任何符号),使用起来复杂(美元符号+大括号包裹要使用的变量名)

三、CMAKE内置变量

  1. CMAKE_BINARY_DIR
    PROJECT_BINARY_DIR
    <projectname>_BINARY_DIR顶层二进制目录(静态)

CMake编译系统的二进制相关的目录其实指的都是cmake命令。你在哪里调用这个二进制cmake,其的目录就在哪里。

  1. CMAKE_SOURCE_DIR
    PROJECT_SOURCE_DIR
    <projectname>_SOURCE_DIR 主cmake所在路径(静态)

CMake编译系统中源CMakeLists.txt目录。需要理解的一个概念是CMake编译系统中,源文件指的是CMakeLists.txt。这个是指整个编译系统最上层的CMakeLists.txt所在的目录,有点像是Workspace目录。

  1. CMAKE_CURRENT_SOURCE_DIR 当前正在处理的源文件目录

CMake编译树中可能包含多个CMakeLists.txt,前面我们知道顶层CMakeLists.txt由变量CMAKE_SOURCE_DIR表示,CMake编译系统会分别进入不同的CMakeLists.txt所在的目录执行cmake命令,此时进入的子目录就是CMAKE_CURRENT_SOURCE_DIR

  1. CMAKE_CURRRENT_BINARY_DIR CMake当前工作目录

如果是 in-source 编译,它跟 CMAKE_CURRENT_SOURCE_DIR 一致,如果是 out-of-source 编译,他指的是 target 编译目录。
使用我们上面提到的 ADD_SUBDIRECTORY(src bin)可以更改这个变量的值。
使用 SET(EXECUTABLE_OUTPUT_PATH <新路径>)并不会对这个变量造成影响,它仅仅修改了最终目标文件存放的路径。

  1. CMAKE_CURRENT_LIST_FILE

输出调用这个变量的 CMakeLists.txt 的完整路径

  1. CMAKE_CURRENT_LIST_LINE

输出这个变量所在的行

  1. CMAKE_MODULE_PATH

这个变量用来定义自己的 cmake 模块所在的路径。如果你的工程比较复杂,有可能会自己编写一些 cmake 模块,这些 cmake 模块是随你的工程发布的,为了让 cmake 在处理CMakeLists.txt 时找到这些模块,你需要通过 SET 指令,将自己的 cmake 模块路径设置一下。比如SET(CMAKE_MODULE_PATH${PROJECT_SOURCE_DIR}/cmake)这时候你就可以通过 INCLUDE 指令来调用自己的模块了。

  1. EXECUTABLE_OUTPUT_PATH 和
    LIBRARY_OUTPUT_PATH

分别用来重新定义最终结果的存放目录,前面我们已经提到了这两个变量。

  1. PROJECT_NAME

返回通过 PROJECT 指令定义的项目名称。

  1. CMAKE_SYSTEM

返回系统名称。Linux下是返回Linux内核版本,如Linux-5.13.0-35-generic

  1. CMAKE_SYSTEM_NAME

系统平台名称。如LinuxFreeBSDWindows

  1. CMAKE_SYSTEM_VERSION

系统版本号。如5.13.0-35-generic

  1. CMAKE_SYSTEM_PROCESSOR

处理器名称。如:x86_64

  1. UNIX WIN32 APPLE

这个通常会被用在根据不同平台选择额外的编译选项,一个典型的应用就是使用M_PI的值,在WINDOWS下除了需要定义cmath/math.h外还需要定义一个宏:_USE_MATH_DEFINES

IF (WIN32)add_compile_definitions(_USE_MATH_DEFINES)
ELSEIF (APPLE)MESSAGE(STATUS "Now is Apple systens.")
ELSEIF (UNIX)MESSAGE(STATUS "Now is UNIX-like OS's.")
ENDIF ()
  1. CMAKE_MAJOR_VERSION CMAKE_MINOR_VERSION CMAKE_PATCH_VERSION

以2.8.6作为例子,2表示主版本号,8表示次版本号,6表示补丁等级

  1. CMAKE_C_COMPILER CMAKE_CXX_COMPILER

C编译器和C++编译器,也可以通过ADD_DEFINITION来指定,默认为/usr/bin/gcc /usr/bin/c++

  1. CMAKE_C_FLAGS CMAKE_CXX_FLAGS

编译时传递给编译器的选项,如-g

  1. CMAKE_INCLUDE_PATH

头文件包含路径。默认为空,配合指令FIND_FILE和FIND_PATH使用

  1. CMAKE_LIBRARY_PATH

库文件搜索路径。默认为空,配合FIND_LIBRARY使用

  1. CMAKE_INSTALL_PREFIX

定义cmake默认安装路径。不加定义则为/usr/local

  1. CMAKE_CURRENT_BINARY_DIR

默认为空。指定命令find_package find_program find_library find_filefind_path的前缀。

  1. CMAKE_MODULE_PATH

默认为空。CMake为上百个软件包提供了查找器(FindXXX.cmake),使用非CMake自带的查找器需要指定目录,也就是设定CMAKE_MODULE_PATH,非自带的需要配合FIND_PACKAGE

  1. CMAKE_BUILD_TYPE

控制构建类型。None默认,Debug带调试,Release发布版本。你可以通过命令行指定,如: cmake -DCMAKE_BUILD_TYPE=Debug

  1. BUILD_SHARED_LIBS

所有程序库的目标设置为共享库,如果没有设置且没有ADD_LIBRARY,默认生成静态库。

  1. EXECUTABLE_OUTPUT_PATH

定义目标二进制文件存放位置,默认为空

  1. LIBRARY_OUTPUT_PATH

定义目标链接库文件存放位置,默认为空

四、C/C++相关

对于gcc编译器选项而言,

set(CXX  "-CXX -Wall -pthread")
set(CMAKE_CXX_FLAGS ${CXX})

其实若只有一个参数,可以这么写:

set(CMAKE_CXX_FLAGS -pthread)

[1] https://www.cnblogs.com/xianghang123/p/3556425.html

(七)CMake变量及其设置相关推荐

  1. cmake cache变量_反复研究好几遍,我才发现关于 CMake 变量还可以这样理解!

    本文的排版有些问题,如果您觉得本文排版不太好看,可以到这里查看: 反复研究好几遍,我才发现关于 CMake 变量还可以这样理解!​mp.weixin.qq.com 摘要: 本文记录一下 CMake 变 ...

  2. CMake I 获取/设置编译器

    目录 一.获取编译器信息 1.与编译器交互 (1)CMake变量 (2)CMakeLists.txt 二.设置编译器 一.获取编译器信息 Microsoft Windows上,如果cmake生成器是V ...

  3. win10系统环境变量怎么设置_mysql环境变量配置win10

    win10配置环境变量正确了吗?如果确实正确了,打开命令行,输入java或者javac等都有使用提示的,如图如果没有正确,本人综合网上的解答,给出一种配置方法,这里. . 什么是环境变量?环境变量一般 ...

  4. java语言环境变量_JAVA语言环境变量的设置教程

    本文主要向大家介绍了JAVA语言环境变量的设置教程,通过具体的内容向大家展示,希望对大家学习JAVA语言有所帮助. 安装JDK到目录,我这里是C:\Java 右键点击计算机属性 在系统变量里面建 JA ...

  5. Android环境变量的设置(详细图解版)

    Android环境变量的设置(详细图解版) 转载于:https://www.cnblogs.com/zhujiabin/p/4875182.html

  6. Linux环境变量的设置和查看方法

    1. 显示环境变量HOME $ echo $HOME /home/redbooks 2. 设置一个新的环境变量hello $ export HELLO="Hello!" $ ech ...

  7. linux环境变量查询设置及保存

    1. 显示环境变量HOME $ echo $HOME /home/redbooks 2. 设置一个新的环境变量hello $ export HELLO="Hello!" $ ech ...

  8. cad绘制椭圆的方法有几种_你还在头疼CAD系统变量如何设置?这些你知道几个吗?...

    CAD有很多系统变量有些是默认的有些是需要我们自己设置的这样也是为了方便.系统变量是由操作系统定义的数据存储位置,无论谁登录该计算机,该位置都相同组的用户可以添加新的变量或更改这些值.cad系统变量c ...

  9. linux之变量的设置与显示

    变量的显示使用 echo 进行显示,在变量前面必须加上 $ [root @localhost ~]#echo $variable [root @localhost ~]#echo $PATH 或者使用 ...

  10. linux 环境变量 term,linux – TERM环境变量未设置

    我有一个file.sh与此,当运行show:TERM环境变量未设置. smbmount //172.16.44.9/APPS/Interfas/HERRAM/sc5 /mnt/siscont5 -o ...

最新文章

  1. ORACLE_SID含义
  2. java集合框架容器 java框架层级 继承图结构 集合框架的抽象类 集合框架主要实现类...
  3. webview重新加载(reload)或者发起 redirect request导致js和objc代码之间的bridge失联解决方案(亲测有效)...
  4. swing JTable 更新数据
  5. java实现红包要多少钱_Java实现发红包功能
  6. C# 类、对象、方法和属性详解(重新排版,页面整洁)
  7. 冒泡排序-----选择排序1-2
  8. 本地计算机上的服务启动后停止。某些服务在未由其他服务或程序使用时将自动停止 解决办法...
  9. (进阶)LeetCode(119)——杨辉三角 II(JavaScript)
  10. Linux 启动流程学习
  11. [SCOI2016]萌萌哒
  12. 解决CAJ阅读器读取学位论文卡到爆炸的问题
  13. 谈谈工业通信协议的采集和转换-如modbus opc profinet ethernetIP 61850等
  14. 编程语言c语言vb,c语言和vb语言哪个比较简单
  15. Premature end of Content-Length delimited message body解决方案
  16. 《C语言入门经典》Ivor Horton第10章习题2
  17. 带你快速看完9.8分神作《Effective Java》—— 序列化篇(所有RPC框架的基石)
  18. 形参和实参的定义和区别
  19. MySQL系列---数据库引擎
  20. 我感觉的优美诗句品鉴(不定时更新)

热门文章

  1. 51单片机计数器c语言编程,求一个 89C51 简易计算器的c语言程序 只要加减乘除就行!...
  2. python必背的英语单词怎么写_背英语单词的最好方法
  3. 香橙派装ubuntu系统
  4. CF755F PolandBall and Gifts
  5. python中使用splash如何挂代理?
  6. 解决Pycharm挂代理后依旧插件下载慢
  7. 半孔板设计需要注意细节问题
  8. mysql字段提取函数_MySQL 字符串截取函数
  9. [金工实习报告]金工实习基本方法,车工/焊接/钳工/铣工/铸造/安全生产/3D打印等
  10. sizeof运算符来获取各种数据类型在内存中所占字节数--gyy整理