zl程序教程

您现在的位置是:首页 >  系统

当前栏目

Linux下CMake简明教程(九) 添加控制选项

Linux控制教程 添加 选项 CMake 简明
2023-09-14 09:15:49 时间

代码在git

有时希望在编译代码时只编译一些指定的源码,可以使用cmake的option命令,主要遇到的情况分为2种:
  • 本来要生成多个bin或库文件,现在只想生成部分指定的bin或库文件
  • 对于同一个bin文件,只想编译其中部分代码(使用宏来控制)

第1种情况

  • 假设我们现在的工程会生成2个bin文件,main1和main2,现在整体结构体如下,
.
├── bin
├── build
├── CMakeLists.txt
└── src
    ├── CMakeLists.txt
    ├── main1.c
    └── main2.c

外层的CMakeLists.txt内容如下

cmake_minimum_required(VERSION 3.5)
project(demo)
option(MYDEBUG "enable debug compilation" OFF)
set (EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin)
add_subdirectory(src)

这里使用了option命令,其第一个参数是这个option的名字,第二个参数是字符串,用来描述这个option是来干嘛的,第三个是option的值,ON或OFF,也可以不写,不写就是默认OFF。

然后编写src目录下的CMakeLists.txt,如下

cmake_minimum_required (VERSION 3.5)

add_executable(main1 main1.c)

if (MYDEBUG)
    add_executable(main2 main2.c)
else()
    message(STATUS "Currently is not in debug mode")    
endif()

注意,这里使用了if-else来根据option来决定是否编译main2.c
其中main1.c和main2.c的内容如下,

然后cd到build目录下输入cmake … && make就可以只编译出main1,如果想编译出main2,就把MYDEBUG设置为ON,再次输入cmake … && make重新编译。

每次想改变MYDEBUG时都需要去修改CMakeLists.txt,有点麻烦,其实可以通过cmake的命令行去操作,例如我们想把MYDEBUG设置为OFF,先cd到build目录,然后输入cmake … -DMYDEBUG=ON,这样就可以编译出main1和main2 (在bin目录下)