CMake是一个跨平台的、开源的构建工具。cmake是makefile的上层工具,它们的目的正是为了产生可移植的makefile,并简化自己动手写makefile时的巨大工作量.目前很多开源的项目都可以通过CMake工具来轻松构建工程
cmake的官网:https://cmake.org/
1,安装cmake:
sudo apt-get install cmake
2,安装gcc和g++
sudo apt-get install gcc
sudo apt-get install g++
两个缺少任何其中一个都会导致生成Makefile失败:如下所示
3,安装成功查看cmake版本:
cmake --version
4,main.c和CMakeLists.txt的编写
注:在同一目录下编写main.c和CMakeLists.txt
main.c:
#include <stdio.h>
int main()
{
printf("hello world\n");
return 0;
}
CMakeLists.txt:
PROJECT (HELLO)
SET(SRC_LIST main.c)
MESSAGE(STATUS "THIS isBINARY dir" ${HELLO_BINARY_DIR})
ADD_EXECUTABLE(hello ${SRC_LIST})
5,构建
命令:
1,cmake .
构建成功之后系统会自动生成如下文件:
2,make
这时候会生成可执行程序hello
3,./hello
4,make VERBOSE=1:可以查看make构建的详细过程
6,详细解释
对CMakeLists.txt的详细解释:
用这个指令定义工程名称,并且可以指定工程支持的语言,支持的语言列表是可以忽略的,默认情况表示支持所有语言。
PROJECT(projectname [CXX] [C] [Java])
这个指令隐式的定义了两个cmake的变量:
<projectname>_BINARY_DIR
<projectname>_SOURCE_DIR
这两个变量可以用(这样不用担心写错工程名称)。
PROJECT_BINARY_DIR
PROJECT_SOURCE_DIR
这里先了解SET指令可以用来显示的定义变量即可。这里是
SET(SRC_LIST main.c)
如果有多个源文件,也可以定义为:
SET(SRC_LIST main.c t1.c t2.c)
这个指令是向终端输出用户定义的信息,包含三种类型:
SEND_ERROR#产生错误,生成过程被跳过。
STATUS#输出前缀为--d的信息。
FATAL_ERROR#立即终止所有的cmake过程。
定义了一个为hello的可执行文件,相关的源文件是SRC_LIST中定义的源文件列表。
ADD_EXECUTABLE(hello ${SRC_LIST})
7,清理工程
make clean:
用来清理makefile产生的中间的文件,但是,不能使用make distclean清除cmake产生的中间件
rm -rf ***:
用来删除cmake的中间件