CMake 是一个跨平台的安装(编译)工具,能够输出各种各样 Makefile 或者 project 文件。
CMake 的组态档取名为 CMakeLists.txt,CMake 是跨平台,可生成 native 编译配置文件,在 Linux/Unix平台,生成 Makefile,在苹果平台,生成 xcode,在 Windows 平台,可以生成 MSVC 工程文件。
mkdir -p /test/hwy
cd /test/hwy/
touch CMakeLists.txt main.c
main.c的内容如下:
#include <studio.h>
int main(int argc, char **argv[]{
printf("hello world \n");
return 0;
}
CMakeLists.txt内容如下:
CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
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})
开始构建:
cmake .
make
./hello
cmake .
表示当前目录,运行后将会自动生成 CMakeFiles 文件夹,CMakeCache.txt,cmake_install.cmake 等文件,并且生成了 Makefile。下一步 “make” 则是去执行的 Makefile,生成我们的目标文件 hello。你可以通过 “make VERBOSE=1” 看到 make 构建的详细过程。最后通过 ./hello 即可运行目标二进制文件。
实际上,上面我们采用的是一种叫做 in-source build(内部构建) 的构建方式,顾名思义,这种方式直接在源代码中进行构建,构建过程的中间产物以及最终的目标文件都会混在一起,我们没办法将项目文件与其分开,更没办法做到自动删除这些中间文件和目标文件。
另外一种比较合理的构建方式叫做 out-of-source build(外部构建) ,这种方式单独在与源代码工程独立的目录下执行构建,保证源代码的纯洁性,更能实现中间文件和目标文件的快速删除。
cd /test/hwy/
mkdir build
cd build
cmake ..
make
“cmake ..” 中的 “..” 表示 build 目录的父目录,即是我们的源代码工程目录,因为父目录存在我们需要的 CMakeLists.txt。构建过程中的中间产物和目标文件都存放在 build 目录中,源文件并没有受其影响。通过删除该文件夹,即可实现中间文件快速删除。
上述的工程还不够好,跟一般的项目工程还有很大区别,一般项目工程大概如下:
├── build
| └── bin
| | └── <project_name>
├── doc
| └── <project_name>.txt
├── src
| ├── xxx.c
| └── CMakeLists.txt
├── CMakeLists.txt
├── COPYRIGHT
├── README
└── run<project_name>.sh
src,用来放置工程源代码,包括源文件、头文件以及该目录的 CMake 文件;doc,用来放置工程的说明文档;文本文件 COPYRIGHT 和 README 是有关 license 和如何使用的说明;构建后的目标文件将放在构建目录的 bin 子目录下;工程目录下添加一个 run<project_name>.sh 脚本,可以用来调用二进制文件,比如需要按照一定配置、顺序调用多个目标文件,才能完成整个项目的功能。
摘自:https://durant35.github.io/2016/04/21/tool_CMake_%E5%BF%AB%E9%80%9F%E5%85%A5%E9%97%A8/