什么是CMake?
CMake本身是一个工具集,由五个可执行的程序组成:cmake、ctest、cpack、cmake-gui和ccmake,其中cmake可以说是出镜率最高的明星级别程序了,它用于在构建项目的第一步,进行项目的配置、生成和构建项目的主要可执行文件的工作。其他的程序们ctest用于运行和报告测试结果的测试驱动程序,cpack用来生成安装程序和源包的打包程序,cmake-gui是 cmake 的图形界面,ccmake(注意ccmake比cmake多了一个c)也是用于图形界面,与cmake-gui不同的地方在于ccmake是基于控制台(terminal)的图形界面。
CMake是如何工作的?
CMake它依赖于系统中的其他工具来执行实际的编译、链接和其他任务。CMake好似一个在构建过程中工作的“协调器”,它清楚哪些步骤需要完成,理解最终目标是什么,以及忙碌于为构建工作找到合适的“工人”和“材料”。综上,这个过程有三个阶段:配置、生成、构建阶段,如下图所示。
CMake应用实例
初学者如何开始使用CMake呢?本文将通过一个个简单的CMake项目,由浅入深地,逐一介绍CMake的一些基本语法、命令和变量。
project1
├── CMakeLists.txt
└── test.cpp
如上所示,项目1包含2个文件:CMakeLists.txt用于描述项目构建步骤;test.cpp,c++源文件,具体内容如下:
- CMakeLists.txt
CMakeLists.txt 文件用于描述 CMake 构建过程和项目配置的文件。它包含了一系列 CMake 命令、变量设置和流程控制结构,用于告诉 CMake 如何生成适合你的平台和编译器的构建系统文件。一个最基本CMakeLists.txt 由3个命令组成,cmake_minimum_required指定cmake最小版本;project指定项目名称,版本等;add_executable指定生成的目标。cmake_minimum_required(VERSION 3.10) project(Test) add_executable(test test.cpp)
- test.cpp
#include <stdio.h> #include <math.h> int main(int argc, char **argv) { const int input_value = atoi(argv[1]); int square = input_value * input_value; printf("%d^2=%d\n", input_value, square); return 0; }
- 项目配置和生成本地编译文件
cd project1 mkdir build cd build cmake ../
- 项目编译
cmake --build .