CMake的基本数据类型是字符串(不区分大小写),一组字符串在一起称为列表(list)。

条件判断中的取值情况如下表:

1, ON, YES, TRUE, Y, 非0的数 
0, OFF, NO, FALSE, N, IGNORE, 空字符串,以“-NOTFOUND”结尾的字符串

变量显式定义

set(VAR a b c)

# 输出 VAR = a;b;c

message("VAR = ${VAR}")

set(VAR a)就是一个字符串,set(VAR a b c)就是一个字符串list。

set(CMAKE_INSTALL_PREFIX "/usr/local" CACHE PATH "Installation Directory")

CACHE PATH表示的含义暂时还没搞清楚。

常用部分内部变量

使用是,使用 set 命令赋值。

比如:

set(CMAKE_BUILD_TYPE "Debug")

  

CMAKE_C_COMPILER 指定C编译器
CMAKE_CXX_COMPILER  
CMAKE_C_FLAGS 编译C文件时的选项,如-g;也可以通过add_definitions添加编译选项
EXECUTABLE_OUTPUT_PATH 可执行文件的存放路径
LIBRARY_OUTPUT_PATH 库文件路径
CMAKE_BUILD_TYPE build 类型(Debug, Release, ...),CMAKE_BUILD_TYPE=Debug
BUILD_SHARED_LIBS 生成分享库
BUILD_LIBS 生成静态库

CMAKE_BINARY_DIR

一样的,cmake 的时候,所在的路径。(一般,我们新建build,然后cd进去,再cmake ..,这个路径就是build)(一般我们希望cmake生成的东西单独在一个文件夹,就是指这里)
PROJECT_BINARY_DIR
<projectname>_BINARY_DIR

CMAKE_SOURCE_DIR

一样的,表示工程顶层目录。(和以上的区别,就是这的路径为build之外,一般指源代码所在文件路径)。

PROJECT_SOURCE_DIR

<projectname>_SOURCE_DIR

CMAKE_CURRENT_SOURCE_DIR  CMakeLists.txt 所在路径

CMAKE_CURRRENT_BINARY_DIR

 如果是 in-source 编译(没有新建build),它跟 CMAKE_CURRENT_SOURCE_DIR 一致,如果是 out-of-source 编译(新建了build),他指的是 target 编译目录。

CMAKE_CURRENT_LIST_FILE

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

CMAKE_CURRENT_LIST_LINE

 输出这个变量所在的行

CMAKE_MODULE_PATH

 这个变量用来定义自己的 cmake 模块所在的路径。也就是xxx.cmake文件

EXECUTABLE_OUTPUT_PATH 

 用来重新定义最终结果的存放目录,可执行文件

LIBRARY_OUTPUT_PATH

 用来重新定义最终结果的存放目录,库文件

PROJECT_NAME

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

CMAKE_BUILD_TYPE ***

生成 Debug 版和 Release 版的程序

CMAKE_CXX_FLAGS_DEBUG 

***为Debug,使用这个参数生成 Makefile

CMAKE_C_FLAGS_DEBUG 

***为Debug,使用这个参数生成 Makefile

CMAKE_CXX_FLAGS_RELEASE 

***为Release,使用这个参数生成 Makefile

CMAKE_C_FLAGS_RELEASE 

***为Release,使用这个参数生成 Makefile

示例:

PROJECT(main)
CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
SET(CMAKE_SOURCE_DIR .) SET(CMAKE_CXX_FLAGS_DEBUG "$ENV{CXXFLAGS} -O0 -Wall -g -ggdb")
SET(CMAKE_CXX_FLAGS_RELEASE "$ENV{CXXFLAGS} -O3 -Wall") AUX_SOURCE_DIRECTORY(. DIR_SRCS)
ADD_EXECUTABLE(main ${DIR_SRCS})

  

将工程设置为Debug模式:

SET(CMAKE_BUILD_TYPE "Debug")

变量引用

使用 ${} 比如:

${CMAKE_BINARY_DIR}

  

参考

http://www.cnblogs.com/xianghang123/p/3556423.html

https://www.jianshu.com/p/44ba033c262a

03-cmake语法-变量,字符串的更多相关文章

  1. CMake语法—普通变量与函数(Normal Variable And Function)

    目录 CMake语法-普通变量与函数(Normal Variable And Function) 1 CMake普通变量与函数示例 1.1 CMakeLists.txt 1.2 执行CMake配置脚本 ...

  2. CMake语法—普通变量与子目录(Normal Variable And Subdirectory)

    目录 CMake语法-普通变量与子目录(Normal Variable And Subdirectory) 1 CMake普通变量与子目录示例 1.1 代码目录结构 1.2 父目录CMakeLists ...

  3. CMake语法—缓存变量(Cache Variable)

    目录 CMake语法-缓存变量(Cache Variable) 1 CMake缓存变量 2 定义缓存变量 2.1 定义格式 2.2 定义示例代码 2.3 运行结果 2.4 小结 3 CMakeCach ...

  4. 009 01 Android 零基础入门 01 Java基础语法 02 Java常量与变量 03 什么是变量?

    009 01 Android 零基础入门 01 Java基础语法 02 Java常量与变量 03 什么是变量? 什么是变量? 形象化的生活中的例子理解什么是变量以及变量的三个元素 我们可以根据客人要求 ...

  5. CMake语法—内置变量

    目录 CMake语法-内置变量 1 CMake变量分类 1.1 普通变量 1.2 缓存变量 1.3 环境变量 1.4 内置变量 2 CMake内置变量分类 2.1 提供信息的变量 2.2 改变行为的变 ...

  6. CMake语法—普通变量与包含、宏(Normal Variable And Include、Macro)

    目录 CMake语法-普通变量与包含.宏(Normal Variable And Include.Macro) 1 CMake普通变量与包含.宏示例 1.1 代码目录结构 1.2 根目录CMakeLi ...

  7. CMake语法—环境变量(Environment Variable)

    目录 CMake语法-环境变量(Environment Variable) 1 定义环境变量 2 应用环境变量 2.1 代码结构 2.2 示例代码 2.3 运行结果 3 小结 CMake语法-环境变量 ...

  8. cmake 常用变量和常用环境变量查表手册---整理 .

    一,cmake 变量引用的方式: 前面我们已经提到了,使用${}进行变量的引用.在 IF 等语句中,是直接使用变量名而不通过${}取值 二,cmake 自定义变量的方式: 主要有隐式定义和显式定义两种 ...

  9. cmake 常用变量和常用环境变量查表手册

    cmake 常用变量和常用环境变量查表手册 一,cmake 变量引用的方式: 前面我们已经提到了,使用${}进行变量的引用.在 IF 等语句中,是直接使用变量名而不通过${}取值 二,cmake 自定 ...

  10. cmake 语法

    语法说明 CMakeLists.txt 文件遵循一种简单的语法包括 注释,命令和空格字符.注释使用#符号,从符号开始之后的一行都表示注释.命令包括命令名,左括号,分隔参数的空白字符和右括号.命令既可以 ...

随机推荐

  1. luoguP5227 [AHOI2013]连通图(线性基做法)

    题意 神仙哈希做法. 随便找个生成树,给每个非树边赋一个值,树边的值为所有覆盖它的边的值得异或和. 删去边集使得图不联通当且即当边集存在一个子集异或和为0,可以用线性基. 证明的话好像画个图挺显然的 ...

  2. CF-1175 B.Catch Overflow!

    题目大意:有一个初始变量,值为0,三种操作 for x 一个循环的开始,循环x次 end 一个循环的结束 add 将变量值加一 问最后变量的值是否超过2^32-1,若超过,输出一串字符,不超过则输出变 ...

  3. java4wifidog_server_README

    项目地址:https://github.com/C-hill/java4wifidog_server 开发环境:Windows  JDK7  Tomcat6  Myeclipse8.5  MySQL5 ...

  4. 手把手教你如何用Fiddler抓取手机数据包(iOS+Android)

    本文主要教你如何通过 Fiddler 来抓取手机端的数据包,包括 iOS 和 Android 端的配置和抓取. 一.Fiddler下载安装 访问 Fiddler 官网:https://www.tele ...

  5. Oracle数据库的关键系统服务整理

    在Windows 操作系统下安装Oracle 9i时会安装很多服务——并且其中一些配置为在Windows 启动时启动.在Oracle 运行在Windows 下时,有些服务可能我们并不总是需要但又害怕停 ...

  6. 【论文阅读】Objects as Points 又名 CenterNet | 目标检测

    目录 Abstract Instruction 分析 CenterNet 的Loss公式 第一部分:\(L_k\) 第二部分:\(L_{size}\) 第三部分:\(L_{off}\) Abstrac ...

  7. C# 随机 抽奖 50个随机码 不重复

    static List<int> Given50RandomNumbers() { List<int> intList = new List<int>(); for ...

  8. mac下安装php7.2、mysql5.7、nginx环境

    本篇文章是通过homebrew安装,home brew对于Mac相当于centos 的yum一样方便简单,大家可以先去安装home brew.网上很多简单靠谱的例子,这里不写了 一.准备条件为了安装最 ...

  9. SAP MM 同一个序列号可以被多次用在交货单发货过账?

    SAP MM 同一个序列号可以被多次用在交货单发货过账? 如下公司间转储订单,从公司代码CSAS转入公司代码HKCS, 物料有启用序列号管理. 转储数量为5 PC.该STO单据共计有2个外向交货单 8 ...

  10. 微信小程序使用websocket通讯的demo,含前后端代码,亲测可用

    目录 0.概述websocket 1.app.js写法 2.后台写法 0.概述websocket (1) 个人总结:后台设置了websocket地址,服务器开启后等待有人去连接它. 一个客户端一打开就 ...