通常软件项目工程都是通过IDE提供的工程管理功能实现的,包括源代码、库路径等等内容。比如,C++工程在Windows平台通常是Visual Studio的sln解决方案来管理,Linux平台通常是通过Make相关工具进行管理。当我们要开发跨平台程序的时候,往往需要分别维护。而CMake则为我们提供了一个统一维护的解决方案。
先来看一个简单的例子:
//main.c
#include <stdio.h>
int main()
{
printf(“Hello World from t1 Main!\n”);
return 0;
}
当我们需要编译这个简单的c文件时,通常在Windows下仍然会建立一个工程进行编译,虽然我们也可以用命令行来编译,但被微软宠坏了的Windows平台研发人员相当一部分对命令行显然不感冒。Linux下则相对简单些,直接用gcc编译就好了。
那么,如果用CMake怎么来编译呢?首先我们需要新建 CmakeLists.txt 文件
PROJECT (Demo)
SET(SRC_LIST main.c)
MESSAGE(STATUS "This is BINARY dir " ${PROJECT_BINARY_DIR})
MESSAGE(STATUS "This is SOURCE dir "${PROJECT_SOURCE_DIR})
ADD_EXECUTABLE(demo SRC_LIST)
然后在命令行运行 cmake .
如果是在Windows平台,会自动生成相应的解决方案文件,如果是在Linux平台,则会自动生成Makefile。
当然,很明显,生成的文件和源代码混在一起,不方便管理。通常,我们需要单独建立一个build目录,然后在build目录下运行 cmake ../,这样生成的文件就都位于build目录下,不会影响原有的源代码结构。