CMake 创建简单工程

Posted by 周思进 on October 23, 2020

最近在看 《Professional-CMake-A-Practical-Guide》,下面对于如何使用 cmake 编译生成一个可执行文件做下记录。

cmake 工程创建时一般分两个目录,一个是源码目录,一个是构建目录,CMakeLists.txt 及工程代码都在源码目录,而 cmake 构建产物则都在构建目录。这样便于文件的版本管理,看起来也会非常干净,不至于中间成果物与源码在一起而显得非常混乱。

在源码目录下创建一个文本文件 CMakeLists.txt,该文件定义了需要构建什么,怎么构建,哪些测试需要运行,哪些包需要创建。

下面是 CMakeCache.txt 的简单示例:

cmake_minimum_required(VERSION 3.2)
project(MyApp
    VERSION 1.0.0
)

add_executable(hello 
    test.c
)

涉及命令有三个: cmake_minimum_required、project 和 add_executable ,对于命令都是大小写不敏感,即 add_executable 和 ADD_EXECUTABLE 效果是一样的。

cmake_minimum_required 设置工程所要求的 cmake 最低版本,如果使用的 cmake 版本低于该版本,则会发生错误。完整语法如下:

cmake_minimum_required(VERSION major.minor[.patch[.tweak]])

关键字 VERSION 必须填写,后面的版本号一般写主版本和次版本即可。 新工程都应该考虑使用 3.2 以上的 cmake 版本,该版本基本包含了相当完整的特性了。

project 指令要紧跟在版本指定后面,用于表明工程名,具体语法如下:

project(projectName
    [VERSION major[.minor[.patch[.tweak]]]]
    [LANGUAGES languageName ...]
)

projectName 是必填项, VERSION 说明工程版本号,LANGUAGES 则用于指定工程使用的编程语言(C, CXX, Fortran, ASM, Java and others),如果省略,则默认是(C, CXX) 。

add_executable 用于创建一个可执行文件,具体语法如下:

add_executable(targetName source1 [source2 ...])

这里 targetName 和 projectName 不要设置一样,多个 source 文件用空格隔开。

接着在构建目录下执行 cmake 命令,如下:

mkdir build
cd build
cmake -G "Unix Makefiles" ../source

可以不指定-G 选项,这样 cmake 将基于主机平台选择默认的生成器类型,一般默认即可。

执行完 cmake 命令后,会在 build 目录下生成 Makefile 文件,其中还有文件 CMakeCache.txt,该文件会将之前 cmake 过程的信息缓存下来,这样下次重新运行 cmake,可以直接使用缓存中的信息,加速构建操作。

贴上最后操作截图:
image