1、Cmake概述
-
Cmake是一个项目构建工具,并且是跨平台的。
-
关于项目构建我们所熟知的有Makefile,然后通过make命令进行项目的构建,并且大多数是IDE都继承了make,比如:VS的nmake,Linux下的GNU make、Qt的qmake等。
-
如果自己手动写makefile,会发现makefile通常依赖当前的编译平台,并且makefile的工作量比较大,解决依赖关系也容易出错。
-
而Cmake恰好能解决上述问题,其允许开发者指定整个过程的编译流程,在根据编译平台,自动生成本地化的Makefile和工程文件,最后用户只需要make编译即可,Cmake是一款用来生成Makefile的构建工具
-
Cmake给我的理解更像是Java语言用于管理项目的Maven和Gradle,但是没有Maven它们有那么强大的功能
2、Cmake简单使用
# 这是一个CMakeLists.txt文件
#[[ 这是一个CMakeLists.txt文件
这是一个CMakeLists.txt文件
这是一个CMakeLists.txt文件
]]
# 指定当前项目所需的最低cmake版本
cmake_minimum_required(VERSION 3.10.2)
# 定义工程名字
#project(test_project
# [VERSION <major>[.<minor>[.<patch>[.<tweak>]]]]
# [DESCRIPTION <project-description-string>]
# [HOMEPAGE_URL <url-string>]
# [LANGUAGES <language-name>...])
project(test_project)
# 添加生成可执行文件的名称和所需要的依赖(依赖以 或者;分隔开)
#add_executable(main main.cpp)
#add_executable(main main.cpp;sub.cpp;add.cpp;mul.cpp;dived.cpp)
add_executable(main main.cpp sub.cpp add.cpp mul.cpp dived.cpp)
-
Cmake支持大写、小写、混合大小写的命令,如果在编写CMakeLists.txt文件时使用的工具对应的命令提示,那么大小写随缘即可。
-
注释行:
#
后面进行写注释 -
注释块:
#
后面不能有空格必须紧跟着[[
-
cmake_minimum_required
:指定使用的cmake最低版本 -
project
:定义工程名称,并可以指定工程的版本、工程描述、web主页地址、支持的语言(默认情况下支持所有语言),如果不需要这些都是可以忽略的,只需要指定出工程名字即可。 -
add_executable
:定义工厂会生成一个可执行程序
3、Cmake简单使用
# tree命令
.
├── add.cpp
├── build
├── CMakeLists.txt
├── dived.cpp
├── head.h
├── main.cpp
├── mul.cpp
└── sub.cpp
-
head.h头文件中定义了add、sub、mul、dived四则运算
-
分别在对应的.cpp文件中进行实现,然后main.cpp是程序的入口
-
CMakeLists.txt就是我们需要编写的文件,编写完毕之后进入build目录进行构建
-
由于cmake命令会生成大量的一些编译产生的文件,为了防止污染工程通常都会在build文件夹下进行构建
-
执行流程
# 进入build文件夹 cd build # cmake需要指定CMakeLists.txt文件所在的目录,生成Makefile cmake ../ # 执行make进行编译,生成可执行程序 make # 执行可执行程序 ./main /* 输出 a + b = 12 a - b = 8 a * b = 20 a / b = 5 */