在 cmake 脚本中,设置编译选项可以通过 add_compile_options 命令,也可以通过 set 命令修改CMAKE_CXX_FLAGS 或 CMAKE_C_FLAGS。

使用这两种方式在有的情况下效果是一样的,但请注意它们还是有区别的:

add_compile_options 命令添加的编译选项是针对所有编译器的(包括 c 和 c++ 编译器);

set 命令设置 CMAKE_C_FLAGS 或 CMAKE_CXX_FLAGS 变量则是分别只针对 c 和 c++ 编译器的。

例如下面的代码

#判断编译器类型,如果是 gcc 编译器,则在编译选项中加入 c++11 支持
if(CMAKE_COMPILER_IS_GNUCXX)add_compile_options(-std=c++11)message(STATUS "optional:-std=c++11")
endif(CMAKE_COMPILER_IS_GNUCXX)

使用 add_compile_options 添加 -std=c++11 选项,是想在编译 c++ 代码时加上 c++11 支持选项。但是因为 add_compile_options 是针对所有类型编译器的,所以在编译 c 代码时,就会产生如下 warning

J:\workspace\facecl.gcc>make b64
    [ 50%] Building C object libb64/CMakeFiles/b64.dir/libb64-1.2.1/src/cdecode.c.obj
    cc1.exe: warning: command line option ‘-std=c++11’ is valid for C++/ObjC++ but not for C
    [100%] Building C object libb64/CMakeFiles/b64.dir/libb64-1.2.1/src/cencode.c.obj
    cc1.exe: warning: command line option ‘-std=c++11’ is valid for C++/ObjC++ but not for C
    Linking C static library libb64.a
    [100%] Built target b64

虽然并不影响编译,但看着的确是不爽啊,要消除这个 warning,就不能使用add_compile_options,而是只针对 c++ 编译器添加这个 option。

所以如下修改代码,则警告消除。

#判断编译器类型,如果是 gcc 编译器,则在编译选项中加入 c++11 支持
if(CMAKE_COMPILER_IS_GNUCXX)set(CMAKE_CXX_FLAGS "-std=c++11 ${CMAKE_CXX_FLAGS}")message(STATUS "optional:-std=c++11")
endif(CMAKE_COMPILER_IS_GNUCXX)

举一反三,我们就可以想到,add_definitions 这个命令也是同样针对所有编译器,一样注意这个区别。

转载:cmake:设置编译选项的讲究(add_compile_options和CMAKE_CXX_FLAGS的区别)_10km的专栏-CSDN博客_cmake_cxx_flags

(SAW:Game Over!)

cmake / add_compile_options、CMAKE_CXX_FLAGS 和 add_definitions 区别相关推荐

  1. CMake和Make之间的区别

    CMake和Make之间的区别 翻译 android_ruben 发布于2016-06-17 11:08:49 阅读数 31033 收藏 更新于2016-06-20 14:47:50 分类专栏: 翻译 ...

  2. cmake 编译选项 add_compile_options CMAKE_CXX_FLAGS 区别

    在cmake脚本中,设置编译选项可以通过add_compile_options命令,也可以通过set命令修改CMAKE_CXX_FLAGS或CMAKE_C_FLAGS. 使用这两种方式在有的情况下效果 ...

  3. c语言项目为什么要build?(gcc、makefile、cmake(qmake)、CMakeLists.txt)(qmake、cmake、qbs区别解析)(qmake还是cmake,mingw作用)

    搞不太懂gcc和cmake(qmake)等的区别 1.gcc是GNU Compiler Collection(就是GNU编译器套件),也可以简单认为是编译器, 它可以编译很多种编程语言(括C.C++. ...

  4. 补充番外14:cmake笔记

    linux更新cmake版本(sudo pacman -S cmake) 零.cmake的构建步骤 步骤 1)第一步是cmake -B build,成为配置阶段(configure),这时候只检测环境 ...

  5. 【CMake】CMake 引入 ( Android NDK 构建脚本 | CMake 命令手册 )

    文章目录 一.Android NDK 构建脚本 二.CMake 构建脚本示例 三.CMake 命令手册 1.CMake 脚本命令 2.CMake 工程命令 该系列博客的应用场景是 Android St ...

  6. CMAKE编译报错 linker input file unused because linking not done

    CMakeLists编译报错linker input file not found 解决办法:add_compile_options(-std=c++11 -o) 删掉 -o 原始CMakeLists ...

  7. Ubuntu下使用CMake编译OpenSSL源码操作步骤(C语言)

    OpenSSL的版本为1.0.1g,在ubuntu下通过CMake仅编译c代码不包括汇编代码,脚本内容如下: build.sh内容: #! /bin/bashreal_path=$(realpath ...

  8. cmake简洁教程 - 第五篇

    由于cmake内容较多,篇幅较长,为了不让人疲倦,分成了多篇博客,全部博客链接如下 cmake简洁教程 - 第一篇_YZF_Kevin的博客-CSDN博客_cmake入门教程 cmake简洁教程 - ...

  9. android中c文件怎么加logo,c – 如何在CMake中添加“-l”(ell)编译器标志

    在Ubuntu 16上工作 我使用g main.cpp -lpq命令编译我的小项目.现在我使用Clion,并想做同样的事情.但我不能在cmake文件中添加编译器标志并得到编译错误. cmake_min ...

最新文章

  1. Python技术栈与Spark交叉数据分析双向整合技术实战--大数据ML样本集案例实战
  2. 并发测试mysql_Jmeter性能测试系列——结果分析与报告输出
  3. 计算机绘图实训,计算机绘图实训-杜兰萍主编.pdf
  4. SHOP++ JTM使用帮助
  5. ASP.NET3种验证码[转]
  6. aliyun maven 添加jar_gradle添加阿里云maven库
  7. 把List对象或者单值对象转换为Json格式
  8. Java filter拦截器的使用
  9. python开发测试岗_作为测试开发岗的面试官,我都是怎么选人的?
  10. 【个人感悟】效率,天道酬勤
  11. Oracle→简介、用户、数据字典、表空间及其文件
  12. 怎么获取连表查询的相同字段
  13. 物联网时代商业模式将驱动商业策略的转变
  14. wap网站制作教程,Github标星5.3K
  15. 申请Apple ID--通过苹果官网申请
  16. 利用PYTHON连接阿里云物联网平台
  17. 设计表:多张表存储学生成绩及各种信息
  18. 【BUCTOJ训练: 质数的和与积(Python)】
  19. 汽车不同的电源接通状态
  20. CSS 网页背景图片设置

热门文章

  1. shell的if判断比较
  2. 2016/7/29作业
  3. java多线程(同步和死锁,生产者和消费者问题)
  4. win7下设置无线上网
  5. 要学好linux运维请从排版画图开始
  6. 从Windows到Linux
  7. k8s设置pod privileged权限(特权):securityContext.privileged=true
  8. arthas命令整理:基础命令、jvm相关、class相关命令
  9. git简明教程:基本操作命令
  10. mockjs针对value生成随机数值(随机字符串,数值,日期,url,图片地址,email,ip等)