CMAKE使用笔记

cmake学习笔记,尝试采取一问一答的形式记录

Ubuntu中如何一键安装cmake

sudo tar -xzvf {cmake_tarball}.tar.gz -C /usr/local --strip-components=1

其中大括号内部需要替换为你自己下载的文件名称

要让CMake文件能跑,有哪些必要的命令

cmake_minimum_required()
project()
add_executable()
其余命令均可选

如何设置C++标准

set(CMAKE_CXX_STANDARD 标准号)
比如设置C++标准为C++ 20
set(CMAKE_CXX_STANDARD 20)

Cmake语法

CMake中的常量

0 OFF N NO FALSE 这些字面量在if的判断中中转化为False
1 ON YES TRUE Y 这些字面量在在if的判断中转化为True

注释

# #号是注释

CMake如何引用变量

${<variable>}
$ENV{<variable>} 引用环境变量
$CACHE{<variable>}引用缓存变量

CMake 条件控制语法

if()
elseif()
else()
endif()

CMake 循环

foreach

foreach(<loop_var> <items>)
  <commands>
endforeach()

几种foreach变体

foreach(<loop_var> RANGE <stop>)
foreach(<loop_var> RANGE <start> <stop> [<step>])
foreach(<loop_var> IN [LISTS [<lists>]] [ITEMS [<items>]])

while

while(<condition>)
  <commands>
endwhile()

两种循环均可以像C一样使用break()和continue()命令终止本次循环

函数

函数名称大小写不敏感

function(<name> [<arg1> ...])
  <commands>
endfunction()

如何设置变量

set() //设置变量
unset() //取消变量

变量命名规则

CMKAE_ _CMAKE_ 开头的都是保留的关键字
其余变量命名规则同C语言

如何设置列表

一堆用空格或者回车或者";"符号分隔的字符串就是列表,举例如下

set(srcs a.c b.c c.c)

CMake生成器表达式 Cmake generator expression

表达式语法为 $<>,所有表达式均在构建期间求值
表达式可以递归

表达式的几种典型类型(未完全列出)

条件表达式

$<condition:true_string>
$<IF:condition,true_string,false_string>
$<BOOL:string> 这一条是将string的值变换为0或者1 空string或者string是cmake中预定义的0, FALSE, OFF, N, NO, IGNORE, NOTFOUND,这些值的时候为0,其余为1

逻辑表达式比较

$<AND:conditions>
$<OR:conditions>
$<NOT:condition>

字符串比较

$<STREQUAL:string1,string2> 此表达式大小写敏感
$<EQUAL:value1,value2>

关于cmake版本号的比较

$<VERSION_LESS:v1,v2>
$<VERSION_GREATER:v1,v2>
$<VERSION_EQUAL:v1,v2>
$<VERSION_LESS_EQUAL:v1,v2>
$<VERSION_GREATER_EQUAL:v1,v2>

string变换

$<LOWER_CASE:string>
$<UPPER_CASE:string>
$<MAKE_C_IDENTIFIER:…> 此表达式将…中的内容转换为C标识符

列表相关表达式(未全部列出)

$<IN_LIST:string,list>
$<LIST:LENGTH,list>
$<LIST:GET,list,index,…>
$<LIST:SUBLIST,list,begin,length>
$<LIST:FIND,list,value>
$<LIST:JOIN,list,glue>

路径相关表达式(未全部列出)

$<PATH_EQUAL:path1,path2>

$<PATH:IS_ABSOLUTE,path>
$<PATH:IS_RELATIVE,path>

$<PATH:GET_ROOT_NAME,path…>
$<PATH:GET_ROOT_DIRECTORY,path…>
$<PATH:GET_ROOT_PATH,path…>
$<PATH:GET_FILENAME,path…>
$<PATH:GET_EXTENSION[,LAST_ONLY],path…>
$<PATH:GET_STEM[,LAST_ONLY],path…>
$<PATH:GET_RELATIVE_PART,path…>
$<PATH:GET_PARENT_PATH,path…>

$<PATH:APPEND,path…,input,…>

当前平台

$<PLATFORM_ID>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值