cmake中添加compile options的几种方法

首先有个小示例

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, 两者分离。

posted @   zwlwf  阅读(1315)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示