cmake简介
cmake是一个开源,跨平台的软件构建工具,简单来说目的就是根据平台自动生成Makefile的,减少了手动编写Makefile的工作量。具有相同功能的另一个工具,就是autotools。但是cmake相比较于autotools,出现得更晚,解决了autotools工具的许多问题。
本文的目的,在于通过实践,了解cmake的基本语法和基本使用。
1. hello,cmake
1.1 编写源码
源码如下:
include <stdio.h>
int main()
{
printf("hello, cmake\n");
return 0;
}
1.2 编写CMakeLists.txt
CMakeList记录了如何生成Makefile的信息,编写如下
PROJECT(HELLO)
SET(SRC_LIST main.c)
MESSAGE(STATUS "This is BINARY dir" ${
HELLO_BINARY_DIR})
MESSAGE(STATUS "This is SOURCE dir" ${
HELLO_SOURCE_DIR})
ADD_EXECUTABLE(hello ${
SRC_LIST})
PROJECT:
PROJECT(projectname [CXX] [C] [Java])
指定工程名称(projectname)为HELLO,这条指令同时定义了两个cmake变量:_BINARY_DIR 和 _SOURCE_DIR为,前者指构建所在目录,而后者指源码所在目录。
SET:
SET(VAR [VALUE] [CACHE TYPE DOCSTRING [FORCE]])
显示定义变量,这里是指设置变量SRC_LIST为main.c,当然可以指定多个源文件
cmkake中引用变量的方式为${变量名}
MESSAGE
MESSAGE([SEND_ERROR | STATUS | FATAL_ERROR] "message to display" ...)
ADD_EXECUTABLE
定义了这个工程会生成一个文件名为hello的可执行文件,相关的源文件为SRC_LIST中定义的源文件列表。
其实当前CMakeLists.txt可以简化为如下的形式:
PROJECT(HELLO)
ADD_EXECUTABLE(hello main.c)
1.3 cmake && make
(1)生成Makefile
cmake .
cmake后的 . 异地为指定当前目录为CMakeLists.txt所在的目录,它会在指定的目录下寻找CMakeLists.txt,并在cmake执行所在目录下生成Makefile
可以看到在当前目录下得到了Makefile以及用于生成Makefile所得到的中间文件,可以将它们全部删除,只保留Makefile和源码。
(2)构建
make
顺利构建,并在当前目录下得到了可执行文件hello
hello正常运