cmake 快速上手笔记

cmake基础语法快速介绍:

cmake注释形式:# 或 #{ }

表示字符串内容:引号“ ” 或者 不加引号直接输入

同一个 cmakelist 文件中,变量名不能重复。

不需要提前定义好变量,未定义的变量在使用时,会被自动创建

1.设定采用的cmake版本:cmake_minimum_required(VERSION 2.8.9)

2. 指定项目名称 :project (名称)

3. 生成可执行程序:add_executable(名称  所需源文件)

源文件可以是.c .cpp文件,可以输入多个源文件,彼此空格分隔

可以是包含源文件绝对路径或相对路径的cmake变量

4. 生成库文件:add_library(名称 库类型  所需源文件)

库类型分为:static/shared  静态库/动态库

源文件可以是.c .cpp文件,可以输入多个源文件,彼此空格分隔

可以是包含源文件绝对路径或相对路径的cmake变量

5. 设置变量值:set(变量名 变量值)

获取变量值:${变量名}

Set(CMAKE_CXX_STANDARD 17) 限定c++标准为17

Set(executeable_out_path 输出目录名称) 设定可执行程序输出目录

Cmake_Current_source_dir /project_source_dir  当前cmakelists 所在文件目录

6.链接静态库 :link_libraries(多个静态库文件名…),

可以用于动态库链接静态库,静态库链接静态库,可执行程序链接静态库。

7.链接动态库:Target_link_libraries(连接目标  权限 多个要链接的库名称…)

该命令一般需要放到cmakelist文件末尾,避免链接失败

可以用于动态库链接动态库,静态库链接动态库,

可执行程序链接动态库,也可以用于静态库连接静态库

Target 可以是源文件,动态库文件,可执行文件

动态库可能有多层依赖,这时候就需要限制动态库内容的传递

权限用来修饰动态库,限制传递依赖关系,

指令包括 public private interface 三种,默认public

Public 表示开放依赖关系,可以四处传递动态库内容到外部库

Private 表示该动态库仅向target开放。

Interface修饰动态库,表示该库对于target只有使用权,没有所有权,库内容对target隐藏

8. 非系统库cmake找不到,需要指定动态库、静态库存放目录

才能连接到库: link_directories(库路径)

9.cmake 定义宏: Add_definitions(-D宏名称)  

能定义多个宏,能在c/c++代码中生效

常见命令

1.获取指定目录下包含的文件信息列表

(1).两个输入参数

Aux_source_directory( 要搜索的目录  存放结果的变量) 

(2). 三个输入参数

File(寻找文件的方式[选项:Glob普通搜索/Glob_resurce递归搜索] 

存放结果的变量 要搜索的文件类型后缀: 比如.hpp .c)

2.设定要包含的头文件路径

include_directories( 要包含的头文件路径 )

3.调试命令,打印信息

Massage(信息类型 信息内容)

信息类型包括:

【此处略去不写】 表示是重要消息

【status】表示这是一般的消息

【warning】警告信息,程序会继续执行

【author_warning】警告信息,程序会继续执行

【send_error】错误,跳过当前正在执行的步骤,继续下一步

【Fatal_error】严重错误,cmake程序执行中止

4.添加多级cmakelist文件结构

一个大的cmake文件可以把任务拆分成多个模块,交给多个cmake文件来分别处理,然后每个cmake文件又可以下挂多个cmake文件。如此反复,可以将任务无限细分成多个可供cmake执行的小模块,因此可以让根部cmakelist统筹全局,让子cmakelist执行具体的操作

在父节点中添加语句:Add_subdirectory(子cmakelist路径)

子cmakelist路径下必须要有cmakelist文件

子cmakelist这一名称只是相对父节点而言,它本身就是一个可独立执行的cmake模块,并不受父节点干扰,按照正常方式编写cmake即可

子cmakelist 可以使用父节点的变量,父节点不能访问子节点定义的变量

Cmake字符串操作

List(命令 执行指令的列表 被操作的多个变量)

cmake只有一种形式的变量定义与使用方式,之前已经介绍

这里叫做列表,只是因为这个变量值,是由多个字符串拼接成的,

这一个字符串在cmake的底层实现中,仍然以未拼接形式区分着组成它的字符串,

形似一种字符串列表。因此可以用来执行 与列表数据结构相关的操作。

实际应用过程中,不需要管那么多,都是cmake变量。

命令包括

(1).append 向列表追加多个字符串

(2).Remove_Item 移除列表中的指定的多个字符串

(3).Lenth 获取字符串列表长度

(4).Get 获取列表长度 List(get stringlist  indexs…  output)

Indexs索引值从0开始,也可以用负数索引列表。

-1表示倒数第一个字符串,可以输入多个索引,获取多个结果,

所有结果形成列表,保存到output中

输入索引不能超出stringlist索引范围,否则会中止cmake程序

(5).join 给列表内容添加制定连接符  比如:ab => a-b

List(join stringlist  连接符  带有连接符的stringlist输出)

(6).find 查找对应值

List(find stringlist  查找的内容 newoutput)

将查找到的数据保存到newoutput,没有找到返回-1

(7).insert 插入元素

List(insert stringlist  插入位置 追加的若干内容)

Prepend 插入到第一个元素

List(prepend stringlist  追加的若干内容)

(8).移除元素

Pop_back 删除最后一个元素,保存结果到list参数三

Pop_front 删除列表第一个元素,保存结果到list参数三

Remove_item 删除指定内容项

Remove_at 删除指定索引项

List(remove_duplicates stringlist) 删除stringlist重复出现的元素

(9).Reverse 逆转列表顺序

(10).排序

List(sort 要操作的列表 compare case deder)

Compare 用来指定排序规则

可选项包括 string 按照字母顺序排序

Natural 按照自然数顺序排序

File_basename 按照基础路径名字来排序

 Case用来控制区分大小写

Sensitive 表示对大小写敏感,为默认值

Insensitive 表示不区分大小写

Drder用来控制排序顺序

Ascending 升序 descending  降序

  • 18
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值