03-cmake语法-变量,字符串
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语法-变量,字符串的更多相关文章
- CMake语法—普通变量与函数(Normal Variable And Function)
目录 CMake语法-普通变量与函数(Normal Variable And Function) 1 CMake普通变量与函数示例 1.1 CMakeLists.txt 1.2 执行CMake配置脚本 ...
- CMake语法—普通变量与子目录(Normal Variable And Subdirectory)
目录 CMake语法-普通变量与子目录(Normal Variable And Subdirectory) 1 CMake普通变量与子目录示例 1.1 代码目录结构 1.2 父目录CMakeLists ...
- CMake语法—缓存变量(Cache Variable)
目录 CMake语法-缓存变量(Cache Variable) 1 CMake缓存变量 2 定义缓存变量 2.1 定义格式 2.2 定义示例代码 2.3 运行结果 2.4 小结 3 CMakeCach ...
- 009 01 Android 零基础入门 01 Java基础语法 02 Java常量与变量 03 什么是变量?
009 01 Android 零基础入门 01 Java基础语法 02 Java常量与变量 03 什么是变量? 什么是变量? 形象化的生活中的例子理解什么是变量以及变量的三个元素 我们可以根据客人要求 ...
- CMake语法—内置变量
目录 CMake语法-内置变量 1 CMake变量分类 1.1 普通变量 1.2 缓存变量 1.3 环境变量 1.4 内置变量 2 CMake内置变量分类 2.1 提供信息的变量 2.2 改变行为的变 ...
- CMake语法—普通变量与包含、宏(Normal Variable And Include、Macro)
目录 CMake语法-普通变量与包含.宏(Normal Variable And Include.Macro) 1 CMake普通变量与包含.宏示例 1.1 代码目录结构 1.2 根目录CMakeLi ...
- CMake语法—环境变量(Environment Variable)
目录 CMake语法-环境变量(Environment Variable) 1 定义环境变量 2 应用环境变量 2.1 代码结构 2.2 示例代码 2.3 运行结果 3 小结 CMake语法-环境变量 ...
- cmake 常用变量和常用环境变量查表手册---整理 .
一,cmake 变量引用的方式: 前面我们已经提到了,使用${}进行变量的引用.在 IF 等语句中,是直接使用变量名而不通过${}取值 二,cmake 自定义变量的方式: 主要有隐式定义和显式定义两种 ...
- cmake 常用变量和常用环境变量查表手册
cmake 常用变量和常用环境变量查表手册 一,cmake 变量引用的方式: 前面我们已经提到了,使用${}进行变量的引用.在 IF 等语句中,是直接使用变量名而不通过${}取值 二,cmake 自定 ...
- cmake 语法
语法说明 CMakeLists.txt 文件遵循一种简单的语法包括 注释,命令和空格字符.注释使用#符号,从符号开始之后的一行都表示注释.命令包括命令名,左括号,分隔参数的空白字符和右括号.命令既可以 ...
随机推荐
- luoguP5227 [AHOI2013]连通图(线性基做法)
题意 神仙哈希做法. 随便找个生成树,给每个非树边赋一个值,树边的值为所有覆盖它的边的值得异或和. 删去边集使得图不联通当且即当边集存在一个子集异或和为0,可以用线性基. 证明的话好像画个图挺显然的 ...
- CF-1175 B.Catch Overflow!
题目大意:有一个初始变量,值为0,三种操作 for x 一个循环的开始,循环x次 end 一个循环的结束 add 将变量值加一 问最后变量的值是否超过2^32-1,若超过,输出一串字符,不超过则输出变 ...
- java4wifidog_server_README
项目地址:https://github.com/C-hill/java4wifidog_server 开发环境:Windows JDK7 Tomcat6 Myeclipse8.5 MySQL5 ...
- 手把手教你如何用Fiddler抓取手机数据包(iOS+Android)
本文主要教你如何通过 Fiddler 来抓取手机端的数据包,包括 iOS 和 Android 端的配置和抓取. 一.Fiddler下载安装 访问 Fiddler 官网:https://www.tele ...
- Oracle数据库的关键系统服务整理
在Windows 操作系统下安装Oracle 9i时会安装很多服务——并且其中一些配置为在Windows 启动时启动.在Oracle 运行在Windows 下时,有些服务可能我们并不总是需要但又害怕停 ...
- 【论文阅读】Objects as Points 又名 CenterNet | 目标检测
目录 Abstract Instruction 分析 CenterNet 的Loss公式 第一部分:\(L_k\) 第二部分:\(L_{size}\) 第三部分:\(L_{off}\) Abstrac ...
- C# 随机 抽奖 50个随机码 不重复
static List<int> Given50RandomNumbers() { List<int> intList = new List<int>(); for ...
- mac下安装php7.2、mysql5.7、nginx环境
本篇文章是通过homebrew安装,home brew对于Mac相当于centos 的yum一样方便简单,大家可以先去安装home brew.网上很多简单靠谱的例子,这里不写了 一.准备条件为了安装最 ...
- SAP MM 同一个序列号可以被多次用在交货单发货过账?
SAP MM 同一个序列号可以被多次用在交货单发货过账? 如下公司间转储订单,从公司代码CSAS转入公司代码HKCS, 物料有启用序列号管理. 转储数量为5 PC.该STO单据共计有2个外向交货单 8 ...
- 微信小程序使用websocket通讯的demo,含前后端代码,亲测可用
目录 0.概述websocket 1.app.js写法 2.后台写法 0.概述websocket (1) 个人总结:后台设置了websocket地址,服务器开启后等待有人去连接它. 一个客户端一打开就 ...