cmake中添加compile options的几种方法

发布时间 2023-05-25 23:01:35作者: zwlwf

首先有个小示例

project(test_compile_option)
cmake_minimum_required(VERSION 3.14)
set(CMAKE_EXPORT_COMPILE_COMMANDS on)
add_compile_options(-Wall)
add_executable(app a.c)
target_compile_options(app PRIVATE "-g")
set(CMAKE_C_FLAGS "-g2")

可以看到compile_commands.json中的命令为,

  "command": "/usr/bin/cc   -g2 -Wall -g -o CMakeFiles/app.dir/a.c.o -c /home/zwl/work/daily/2023-05-25/a.c",

这里通过三种方法引入了三个编译参数,

  1. add_compile_options,
    -- 这是方式是给这条命令后出现的target( add_executable/add_library ), 统一添加编译参数,
    使用时需要注意,一定要在target的申明的前面,放在后面不生效
    -- 这个命令的参数添加效果为叠加式,如下会引入编译参数-Wall -Wall2.
add_compile_options(-Wall)
add_compile_options(-Wall2)
  1. target_compile_options
    -- 相比前面add_compile_options, 这个命令不同点主要有两个。一是,在target申明后用,二是,这个命令作用于特定的target,而不是对所有的target生效
    -- 这个命令的参数添加效果同上,为叠加式

  2. 设置CMAKE_C_FLAGS
    -- 本质是操作全局变量,通过set命令完成,是否为叠加取决于使用方式,set(CMAKE_C_FLAGS "-g") 为非叠加方式, set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g")为叠加式,
    -- 这个全局变量在拼接最后的编译命令时最先使用。
    -- 这个变量仅限于C语言,C++对应CMAKE_CXX_FLAGS, 两者分离。