cmake:设置编译选项的讲究(add_compile_options和CMAKE_CXX_FLAGS的区别) 转自CSDN

2023-05-16

https://blog.csdn.net/10km/article/details/51731959

cmake:设置编译选项的讲究(add_compile_options和CMAKE_CXX_FLAGS的区别)
2016年06月22日 09:53:48
阅读数:25928
在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)
1
2
3
4
5
使用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)

转载于:https://www.cnblogs.com/Dennis-mi/articles/9212573.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

cmake:设置编译选项的讲究(add_compile_options和CMAKE_CXX_FLAGS的区别) 转自CSDN 的相关文章

  • CMake 中 LINK_LIBRARIES 的递归列表

    我正在尝试获取链接到 CMake 中特定目标的所有库的绝对路径列表 以便在调用中使用add custom command 然而 get target property LINK LIBRARIES TARGET LINK LIBRARIES
  • CMake:连续编译程序两次

    为了能够进行许多自动优化 我希望能够使用标志编译我的程序 fprofile generate首先 然后运行它生成配置文件 然后使用以下命令重新编译程序 fprofile use反而 这意味着我想连续编译我的程序两次 使用两个不同的CMAKE
  • 在cmake中集成bash测试脚本

    我有一个 C cmake 项目 它使用 Boost Test 进行单元测试 现在我想向 cmake 公开一系列 bash 脚本 用于集成测试 假设每个脚本在以下情况下返回 0PASS或某些情况下 0FAILURE 我希望每次运行时都执行每个
  • CMake 创建可执行文件时未定义的引用

    我是 CMake 新手 我正在尝试编译我的项目 该项目创建了一些静态库和一些可执行文件 下面是我拥有的文件结构的示例 PROJECT SRC 子项目 1该文件夹的 cpp 所有源文件 和CMakeLists txt 1 创建静态库 子项目
  • 如何在使用 Cmake 构建期间编译 HLSL 着色器?

    我正在开发 d3d 应用程序 我想在使用 cmake 构建期间编译我的 hlsl 着色器 我不知道从哪里开始 这是我当前的 CMakeLists txt cmake minimum required VERSION 3 20 project
  • CMake“无法运行 MSBUILD.exe”命令错误

    当我想为 opencv 3 3 0 创建 Visual Studio 15 2017 make 文件时 它给了我以下错误消息 error in configuration process project files maybe invali
  • CMake 找不到请求的 Boost 库

    既然我已经浏览了其他人的解决方案几个小时 但找不到适合我的问题的正确答案 我想将我的具体问题带给您 我正在尝试使用 CMake 构建 vsomeip 为此 我之前构建了 boost 1 55 但是 我在 CMake 中收到以下错误 The
  • 如何将新的 Visual Studio 2017 cmake 功能与 gitlab CI 运行程序结合使用

    我以直接的方式为 Linux 设置了 gitlab ci runner cmake make make test 大致如下 variables GIT SUBMODULE STRATEGY recursive stages build te
  • 将 gcov 与 CMake/CDash 结合使用的详细指南?

    我在我的项目中使用 CMake 并设置了 cdash 服务器以进行连续 夜间构建 一切运行良好 通过设置 crontab 我们可以将每小时 每晚的构建 测试结果自动上传到我们的 cdash 服务器 我的下一步是将测试覆盖率报告添加到构建中
  • 如何使用自定义 CMake 版本执行 Visual studio 2019 Ninja 构建?

    我正在尝试从 IDE 在 Visual Studio 2019 上使用 Ninja 构建一个项目 我想使用与 VS 2019 发行版中集成的版本不同的 CMake 版本 我已经设置了cmakeExecutable我的变量CMakeSetti
  • CMake - 未定义参考

    我正在尝试将 gtest 包含到我的项目中 问题是我在 GTest 中收到未定义的引用错误 我正在尝试在 Gtest 中测试 Node 类 在节点的构造函数中 我使用类记录器 尽管我已将库记录器添加到 gtest target 中 但我仍然
  • 如何在cmake中将构建类型更改为Release模式?

    我正在尝试以发布模式构建一个项目 默认情况下它是在调试模式下构建的 我正在设置变量CMAKE BUILD TYPE到 释放 CMakeLists txt 但它仍在调试模式下构建项目 当我在 CMake 命令中传递 Release 作为构建类
  • CMake:如何更改单个目标的编译器

    我有使用交叉编译器的嵌入式项目 我想介绍一下Google测试 用原生GCC编译器编译 另外使用 CTC 编译器构建一些单元测试目标 Briefly 我有 3 个不同的目标并用 3 个不同的编译器编译它们 如何表达它CMakeLists tx
  • CMake、Exe找不到DLL

    所以我尝试在 Windows 上使用 cmake 设置一个项目 这就是我的项目结构 游戏引擎 git build include source testing CMakeLists txt 这个想法是 source 目录包含 GameEng
  • 编译器标志的 cmake list 附加会产生虚假结果?

    我需要向 CMake 文件 CMake 2 8 10 2 中的 C 和 C 编译行添加各种标志 我看到有些人使用add definitions但据我所知 这是用于预处理器标志的 D 我有一些标志不想传递给预处理器 所以我一直在尝试修改CMA
  • CMake source_group() 无法在分层项目设置中正常工作

    在进行更改以使 CMake 项目具有分层文件夹管理后 source group 似乎不再正常工作 CMake 只是将所有内容转储到默认过滤器中 我尝试了各种正则表达式来从父级获取每个源文件的相对文件路径 甚至对父级 CMakeLists t
  • CMake第三方库安装

    我是编程新手 对于我的研究项目 我需要安装一个第三方库以便与 CMake 一起使用 GitHub项目 https github com cpp io2d P0267 RefImpl blob master BUILDING md 我在我的电
  • 使用 CLion IDE 运行 Opengl 程序 [重复]

    这个问题在这里已经有答案了 我知道这个问题已经被问过 但提供的解决方案确实对我不起作用 我想通过 CLion IDE 运行我的 OpenGL 程序 我可以通过 Ubuntu 中的终端运行相同的程序 gcc progname c lglut
  • 即使不在 Windows 上,生成器表达式也会将 WIN32 变量计算为 true

    我在 Ubuntu 上工作 这是我的 CMake 代码的一部分 有问题的部分在最后一句中 include ExternalProject ExternalProject Add fftw3 external URL http www fft
  • 如何在cmake中静态链接到glibc

    我正在尝试从 Fedora 构建一个可以在 RedHat 6 机器上运行的包 所以我需要构建和静态链接一些RedHat机器中不存在的库 我发现我可以你 static libgcc or static libstdc 与标准库的静态版本链接

随机推荐

  • 电赛准备过程记录

    电赛记录 xff08 1 xff09 2021全国大学生电子设计大赛参赛纪实 xff08 无人机赛题 xff09 提示 xff1a 写完文章后 xff0c 目录可以自动生成 xff0c 如何生成可参考右边的帮助文档 文章目录 电赛记录 xf
  • Jetson TX2新手上路全记录(1)

    Jetson TX2小白零基础上手记录 xff08 1 xff09 暑假申请了一块TX2进行学习 xff0c 从头开始记录学习过程 趁着在装虚拟机先唠两句 文章目录 Jetson TX2小白零基础上手记录 xff08 1 xff09 开箱环
  • Jetson TX2新手上路全记录(3)

    ng 3 提示 xff1a 这里可以添加系列文章的所有文章的目录 xff0c 目录需要自己手动添加 例如 xff1a 第一章 Python 机器学习入门之pandas的使用 提示 xff1a 写完文章后 xff0c 目录可以自动生成 xff
  • 傅里叶变换详解

    一 用途 xff1a 任意 的函数经过一定的分解 xff0c 都能够表示为正弦函数的线性组合形式 比如想要过滤一首音乐中的噪音 xff0c 我们可以使用傅里叶变换将叠加后的图像分离为一个个纯声的正弦图像 xff0c 去掉特定频率的噪声就能实
  • git如何删除本地所有未提交的更改

    在使用git的时候 xff0c 如果本地做的修改都不想保留了 xff0c 可以通过下面命令恢复成HEAD版本 xff0c 未提交的以及加入暂存区中的修改都会被舍弃 git reset hard git clean xdf 转自
  • ESP32的RMT模块项目实用

    1 技术背景 最近公司在用ESP32的模组方案实现智能音箱的相关功能的项目 需要展示模组的网络状态以及音箱的语音交互状态 xff0c 找了一家RGB灯板供应商 需要模组通过一个io口输出脉冲波形 xff0c 来控制灯板切换模式 xff0c
  • ESP32 LOG库使用

    ESP32 log库 官方文档 一 printf是不可重入函数 printf不能在中断中被调用的原因是它是一个不可重入函数 xff0c 而在中断中要避免调用不可重入函数 xff0c 首先我们先说说什么是不可重入函数 简单说来 xff0c 区
  • C++ 数组(vector)常用操作总结

    目录 1 vector对象的定义和初始化方式 2 vector 常用基础操作 3 使用迭代器的遍历 插入 删除操作 4 vector 元素的重排操作 xff08 排序 逆序等 xff09 5 vector 中找最值 6 改变vector大小
  • 小熊派开发板移植RT-FOTA

    前言 买了小熊派的开发板 xff0c 将demo code验证完成之后就放下了 刚好最近工作也在做OTA相关的开发 xff0c 发现自己对于升级的功能还不够了解 xff0c 在码云找到了一位大神基于RTThread的RT FOTA代码 xf
  • 小熊派移植RT-Thread 的app代码

    前言 在上一篇我们已经讲解了如何移植RT FOTA到小熊派开发板 本篇我们将继续移植RT Thread xff0c 实现app代码的移植开发 xff0c 并将BootLoader和app一起烧录到开发板 xff0c 完成BootLoader
  • easyflash源码分析流程图

    最近周末刚好有空 xff0c 将easyflash源码看了一下 xff0c 了解了作者的设计理念 将学习内容整理成流程图贴上来 1 esayflash初始化流程 2 esayflash set env
  • .git bojects目录文件为空

    这里写自定义目录标题 git error object file git objects b9 e269f50db2a3415cc8ad5ba40b82b9b6a13d45 is empty 解决方法 xff1a 1 find git ob
  • freertos与rtthread内核实现的不同处

    一直在使用rtos作为主要开发内容 xff0c 却没有详细了解过rtos的内核实现机制 最近一个月 xff0c 抽了点时间将freertos和rtthread的内核代码看了下 xff0c 了解了实时系统的实现机制和设计思想 这里学习free
  • FlashDB移植与应用

    FlashDB移植与应用 最近工作需要 xff0c 对设备参数进行备份存储 xff0c 由于之前使用的是简单的分区备份方法 Easyflash的单实例不再适用 后面发现大神基于easyflash进行了新版本更新 xff0c 但是不向前兼容
  • ROBOMASTER机甲大师赛视觉组学习方案

    ROBOMASTER机甲大师赛视觉学习方案 视觉技能学习踩坑硬件平台环境配置个人修为坑 机甲大师 xff08 RoboMaster xff09 是由大疆创新 xff08 DJI xff09 的创始人汪滔发起并承办 由共青团中央 全国学联 深
  • (一)HTML5 基础

    文章目录 一 HTML 简介二 HTML5 骨架1 文档类型说明2 W3C 组织3 标签4 html 标签对5 head 标签对 1 meta 标签对 2 title 标签对 3 SEO 6 body 标签对 三 文字标签1 标题标签2 段
  • 程序员真的是我们喜欢的工作吗?是生活?还是理想?

    有人说程序员年薪近百万 xff01 程序员 成实现阶级跨越的好职业 xff1f 在大多数人的印象里 xff0c 程序员是非常具有 钱途 的职业 xff0c 年薪至少几十万 半年赚一套房 要嫁就嫁程序员 等类似的消息满天飞 xff0c 足见程
  • C盘被pycharm的缓存数据占满,清理content.dat.storageData

    当你用PyCharm跑一些特殊的程序时 xff0c 你会发现你的C盘容量减少或被占满 xff0c 那么如何找到那些缓存数据并释放C盘的磁盘空间呢 xff1f 我是采用下面的方法 xff1a 先下载一个磁盘扫描软件 xff0c 我用的是Spa
  • C++ 链表构建与基本操作

    本文没啥干货 xff0c 纯属笔记 xff0c 建议出门左拐哈 目录 1 创建单向链表 2 在链表结尾添加元素 3 从链表中删除第一个值为 val 的元素 4 测试用例 1 创建单向链表 单向链表可以使用结构体的形式创建 xff0c 定义一
  • cmake:设置编译选项的讲究(add_compile_options和CMAKE_CXX_FLAGS的区别) 转自CSDN

    https blog csdn net 10km article details 51731959 cmake 设置编译选项的讲究 add compile options和CMAKE CXX FLAGS的区别 2016年06月22日 09