cmake / add_compile_options、CMAKE_CXX_FLAGS 和 add_definitions 区别
在 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 区别相关推荐
- CMake和Make之间的区别
CMake和Make之间的区别 翻译 android_ruben 发布于2016-06-17 11:08:49 阅读数 31033 收藏 更新于2016-06-20 14:47:50 分类专栏: 翻译 ...
- cmake 编译选项 add_compile_options CMAKE_CXX_FLAGS 区别
在cmake脚本中,设置编译选项可以通过add_compile_options命令,也可以通过set命令修改CMAKE_CXX_FLAGS或CMAKE_C_FLAGS. 使用这两种方式在有的情况下效果 ...
- 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++. ...
- 补充番外14:cmake笔记
linux更新cmake版本(sudo pacman -S cmake) 零.cmake的构建步骤 步骤 1)第一步是cmake -B build,成为配置阶段(configure),这时候只检测环境 ...
- 【CMake】CMake 引入 ( Android NDK 构建脚本 | CMake 命令手册 )
文章目录 一.Android NDK 构建脚本 二.CMake 构建脚本示例 三.CMake 命令手册 1.CMake 脚本命令 2.CMake 工程命令 该系列博客的应用场景是 Android St ...
- CMAKE编译报错 linker input file unused because linking not done
CMakeLists编译报错linker input file not found 解决办法:add_compile_options(-std=c++11 -o) 删掉 -o 原始CMakeLists ...
- Ubuntu下使用CMake编译OpenSSL源码操作步骤(C语言)
OpenSSL的版本为1.0.1g,在ubuntu下通过CMake仅编译c代码不包括汇编代码,脚本内容如下: build.sh内容: #! /bin/bashreal_path=$(realpath ...
- cmake简洁教程 - 第五篇
由于cmake内容较多,篇幅较长,为了不让人疲倦,分成了多篇博客,全部博客链接如下 cmake简洁教程 - 第一篇_YZF_Kevin的博客-CSDN博客_cmake入门教程 cmake简洁教程 - ...
- android中c文件怎么加logo,c – 如何在CMake中添加“-l”(ell)编译器标志
在Ubuntu 16上工作 我使用g main.cpp -lpq命令编译我的小项目.现在我使用Clion,并想做同样的事情.但我不能在cmake文件中添加编译器标志并得到编译错误. cmake_min ...
最新文章
- Python技术栈与Spark交叉数据分析双向整合技术实战--大数据ML样本集案例实战
- 并发测试mysql_Jmeter性能测试系列——结果分析与报告输出
- 计算机绘图实训,计算机绘图实训-杜兰萍主编.pdf
- SHOP++ JTM使用帮助
- ASP.NET3种验证码[转]
- aliyun maven 添加jar_gradle添加阿里云maven库
- 把List对象或者单值对象转换为Json格式
- Java filter拦截器的使用
- python开发测试岗_作为测试开发岗的面试官,我都是怎么选人的?
- 【个人感悟】效率,天道酬勤
- Oracle→简介、用户、数据字典、表空间及其文件
- 怎么获取连表查询的相同字段
- 物联网时代商业模式将驱动商业策略的转变
- wap网站制作教程,Github标星5.3K
- 申请Apple ID--通过苹果官网申请
- 利用PYTHON连接阿里云物联网平台
- 设计表:多张表存储学生成绩及各种信息
- 【BUCTOJ训练: 质数的和与积(Python)】
- 汽车不同的电源接通状态
- CSS 网页背景图片设置