CMake入门指南
该教程基于官方的Tutorial
概述
CMake的功能类似于GNU autotools,都是使用程序化的方式,自动为项目生成对应平台下的编译规则文件(以下简称Makefile)——比如windows平台下各种IDE的project文件,或者Linux平台下的Makefile。CMake的运作依赖于CMakeLists.txt
(注意大小写)这个配置文件,这个(些,一个项目中可能存在多个)文件利用各类宏对生成Makefile的过程进行编程。
第一步:编译第一个Hello world程序
详细过程
创建一个项目目录并在项目根目录创建两个文件CMakeLists.txt
和main.c
。
main.c
的内容:
#include <stdio.h>
int main(void) {
printf("Hello from main.c!\n");
return 0;
}
CMakeLists.txt
的内容:
PROJECT(HELLO)
CMAKE_MINIMUM_REQUIRED(3.0)
SET(SRC_LIST main.c)
MESSAGE(STATUS "The HELLO_BINARY_DIR is " ${HELLO_BINARY_DIR})
MESSAGE(STATUS "The HELLO_SOURCE_DIR is " ${HELLO_SOURCE_DIR})
ADD_EXECUTABLE(hello ${SRC_LIST})
之后在根目录下运行:
cmake .
然后一大堆输出后,可以看到CMake通过检查CMakeLists.txt
在当前目录下生成了一大堆文件,以及最关键的Makefile文件。之后的过程就跟正常的make
命令使用方式相同了。
一些解释
PROJECT
宏
基本格式:PROJECT(NAME [CXX][C][Java])
主要用于指定项目名称和项目语言,这里的项目的名称会影响到<NAME>_BINARY_DIR
和<NAME>_SOURCE_DIR
两个CMake变量。
CMAKE_MINIMUM_REQUIRED
宏
基本格式:CMAKE_MINIMUM_REQUIRED(VERSION)
用于指定需求的最小的cmake
版本
SET
宏
基本格式:SET(VAR VALUE)
SET
宏可以声明CMake变量,VALUE
可以使用字符串、变量拼接的方式。
MESSAGE
宏
基本格式:MESSAGE(STATUS | SEND_ERROR | FATAL_ERROR VALUE)
MESSAGE
用于向控制台输出一条信息。
STATUS: 表明向控制台输出一条普通状态信息
SEND_ERROR: 表明向控制台输出一条普通错误信息
FATAL_ERROR: 表明向控制台输出一条致命错误信息,输出这一信息后,CMake过程将被终止
ADD_EXECUTABLE
宏
基本格式:ADD_EXECUTABLE(EXECUTABLE_NAME SRC_FILES)
用于生成一个可执行文件,SRC_FILES
是一个用空格隔开的源文件列表
<name>_BINARY_DIR
和<name>_SOURCE_DIR
内置变量
这两个变量分别指定了项目编译目录和源码目录,更通俗一点,前者是你执行CMake命令时的目录,而后者是你的CMakeLists.txt
所在的目录。<name>
是你用PROJECT
指定的项目名称(区分大小写)。