一、初识cmake
cmake集中开源,跨平台,能够管理大型项目,简化编译构建过程和编译过程,高效率,可扩展于一体,简单而强大的项目构建工具
二,安装cmake
一般不需要安装,cmake目前已经成为各大Linux发行版提供的组件,所以,需要自己动手安装的可能性很小。如果你使用的操作系统(比如Windows或者某些Linux版本)没有提供cmake或者包含的版本较旧,建议你直接从cmake官方网站下载安装。
cmake官网:https://cmake.org/download/
三、初试cmake – cmake的helloworld
Hello world,世界 你好
一个最简单的例子Helloworld来演练一下cmake的完整构建过程
1、准备工作:
本节对应的源代码所在目录:Demo1。
新建一个 demo1 文件,目录结构如下
[root@ecs-x-medium-2-linux-20200312093025 cmake]# pwd
/root/cmake
[root@ecs-x-medium-2-linux-20200312093025 cmake]# tree
.
└── demo1
1 directory, 0 files
所有的cmake练习都会放在/root/cmake的子目录下
在demo1目录新建main.c和CMakeLists.txt (注意文件名大小写):
main.c
#include <stdio.h>
int main()
{
printf("Hello World!\n");
return 0;
}
CmakeLists.txt
# CMake 最低版本号要求
cmake_minimum_required (VERSION 2.8)
# 项目信息
project (demo1)
# 指定生成目标 将名为 main.c 的源文件编译成一个名称为 Demo 的可执行文件。
add_executable(demo main.c)
CMakeLists.txt 的语法比较简单,由命令、注释和空格组成,其中命令是不区分大小写的。符号 #
后面的内容被认为是注释。命令由命令名称、小括号和参数组成,参数之间使用空格进行间隔。
对于上面的 CMakeLists.txt 文件,依次出现了几个命令:
-
cmake_minimum_required
:指定运行此配置文件所需的 CMake 的最低版本; -
project
:参数值是demo1
,该命令表示项目的名称是demo1
。 -
add_executable
:将名为 main.c 的源文件编译成一个名称为 Demo 的可执行文件
2、开始构建
所有的文件创建完成后,demo1目录中应该存在main.c和CMakeLists.txt两个文件,如下所示
[root@ecs-x-medium-2-linux-20200312093025 cmake]# tree
.
└── demo1
├── CMakeLists.txt
└── main.c
1 directory, 2 files
编译项目
之后,在 demo1 目录执行 cmake .
,得到 Makefile 后再使用 make
命令编译得到 Demo1 可执行文件。
[root@ecs-x-medium-2-linux-20200312093025 demo1]# ls
CMakeLists.txt main.c
[root@ecs-x-medium-2-linux-20200312093025 demo1]# cmake .
-- The C compiler identification is GNU 4.8.5
-- The CXX compiler identification is GNU 4.8.5
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Configuring done
-- Generating done
-- Build files have been written to: /root/cmake/demo1
[root@ecs-x-medium-2-linux-20200312093025 demo1]# make
Scanning dependencies of target demo
[100%] Building C object CMakeFiles/demo.dir/main.c.o
Linking C executable demo
[100%] Built target demo
[root@ecs-x-medium-2-linux-20200312093025 demo1]# ./demo
Hello World!
3、清理工程:
跟经典的autotools系列工具一样,运行:
make clean
即可对构建结果进行清理
四、内部构建 与 外部构建
上面的例子展示的是“内部构建”,相信看到生成的临时文件比你的代码文件还要多的时候,估计这辈子你都不希望再使用内部构建!
对于cmake,内部编译上面已经演示过了,它生成了一些无法自动删除的中间文件,所以,引出