C/C++生态工具链——编译构建工具CMake/CMakeList初探

一,CMake简介

        CMake的全称是Cross-platform Make。我第一次参与Linux C++开发时使用的工具是Make,而后开始切换到CMake,一开始以为CMake是和C语言有关,原来开头的C表示它可以跨平台。

CMake的使用场景:

        跨平台编译运行,交叉编译。一般基于CMakeLists.txt文件定义的编译构建规则来生成目标文件和目标库。

CMakeLists.txt样例如下: 

#cmake最低版本需求
cmake_minimum_required(VERSION 3.13)
#项目名称
project(cmake_study)
#相关设置用set函数
set(CMAKE_CXX_STANDARD 11)
#生成的可执行文件的名称
add_executable(cmake_study src/main.cc)

在Linux环境使用CMake的构建和编译流程如下:

        step1. 编写CMake的配置文件——CMakeLists.txt。

        step2. 执行命令 cmake PATH 或者 ccmake PATH 构建生成 Makefile配置文件。PATH为CMakeLists.txt所在的目录。

        step3. 在Makefile文件所在的路径,执行make命令进行编译。

一般使用过程如下:

$ mkdir build
$ cd build/
$ cmake ..
$ make

        * 为了不让编译产生的中间文件污染项目的文件结构,专门创建build文件夹进行编译构建。

二,CMake与Make的区别

        CMake并不直接参与软件的构建和编译,而是生成用于构建的Makefile等配置文件。因此在完成同样的编译任务时,CMake比Make的用法更容易,且屏蔽了Makefile中的很多复杂的语法点。

三,CMakeLists.txt语法

        cmake的语法由函数名和参数构成,参数区分大小写,函数名不区分大小写(这个依据个人喜好,笔者习惯用小写,大写有点费眼睛+_+)。


(1) cmake_minimum_required

含义:设置项目所需的最低cmake版本以及更新策略

语法:

cmake_minimum_required(VERSION <min>[...<policy_max>] [FATAL_ERROR])

使用样例:

cmake_minimum_required(VERSION 2.8.0)


(2) project

含义:设置项目的名称、版本、编程语言等信息

语法:

project(<PROJECT-NAME>

           [VERSION <major>[.<minor>[.<patch>[.<tweak>]]]]

           [LANGUAGES <language-name>...])

使用样例:

project(Demo)


(3) set

含义:设置普通变量、缓存或环境变量的值

语法:

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

set(<variable> <value>... CACHE <type> <docstring> [FORCE])

set(ENV{<variable>} [<value>])

使用样例:

set(CMAKE_CXX_COMPILER D:/MinGW/bin/g++)


(4) file

含义:定义对文件系统的文件和路径的操作,可以结合Linux指令对文件的操作去理解。

语法:

file(READ <filename> <out-var> [...])

file({WRITE | APPEND} <filename> <content>...)

file(MAKE_DIRECTORY [<dir>...])

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员与背包客_CoderZ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值