前言
前面两篇《CMake实战(一)》,《CMake实战(二)》,主要是介绍单目录和多目录的编译,接下来看一下自定义编译选项和交叉编译。
使用实例
下面源码在《CMake实战(二)》的基础上进行修改
(1) 修改main.c的内容如下:
1 2 3 4 5 6 7 8 9 10 11 12 | #include<stdio.h> #include "hello.h" #include "config.h" int main(void) { printHello(); #ifdef BUILD_CONFIG_FILE printf("build config file test\r\n"); #endif return 0; } |
(2) 修改根目录CMakeLists.txt, 内容如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | #cmake最低版本需求,不加入此行会受到警告信息 CMAKE_MINIMUM_REQUIRED(VERSION 2.6) PROJECT(HELLO) #项目名称 # 加入一个配置头文件,用于处理 CMake 对源码的设置 CONFIGURE_FILE( "${PROJECT_SOURCE_DIR}/config.h.in" "./config.h" ) # 是否使用BUILD_CONFIG_FILE宏,默认开启 OPTION(BUILD_CONFIG_FILE "build config test option" ON) #把当前目录(.)下所有源代码文件加入变量SRC_LIST AUX_SOURCE_DIRECTORY(. SRC_LIST) # 添加hello子目录 ADD_SUBDIRECTORY(hello) # 设置头文件查找目录 INCLUDE_DIRECTORIES(./build/ ./hello) #生成应用程序 main ADD_EXECUTABLE(main ${SRC_LIST}) # 添加链接库, hello即子目录编译的库 TARGET_LINK_LIBRARIES(main hello) |
就在原来的基础上新增CONFIGURE_FILE和OPTION。
(3) 添加config.h.in文件,内容如下:
1 | #cmakedefine BUILD_CONFIG_FILE |
目录结构如下:

(4) 使用ccmake进行配置
1 2 | cd build ccmake .. |

按c进入配置

然后出现上面的选项,然后再按c,就能配置了。

按enter可以进行编辑,编辑完按g生成即可!生成的文件如下:

这边我们没有使用cmake命令,而是使用ccmake这个工具,它是终端图形化的工具,而cmake是命令行工具。ccmake在选项配置上更友好!
(5) 编译执行

(6) 交叉编译
要进行交叉编译只需要在CMakeLists.txt中加入下面配置:
1 2 3 4 5 6 | #告知当前使用的是交叉编译方式,必须配置 SET(CMAKE_SYSTEM_NAME Linux) SET(TOOLCHAIN_DIR "/usr/bin") # 交叉编译工具的位置 set(CMAKE_CXX_COMPILER ${TOOLCHAIN_DIR}/arm-linux-gnueabihf-g++) set(CMAKE_C_COMPILER ${TOOLCHAIN_DIR}/arm-linux-gnueabihf-gcc) |
总结
自定义编译选项和Autotools中的configure类似,用于配置需要的编译选项。而交叉编译也是比较常用的,毕竟是做嵌入式的嘛。CMake基本的内容就差不多了,更多深入的内容可以看官方文档。平时需要的时候再查文档即可。