cmake:获取GUN编译器的版本

2024-02-17 14:59

本文主要是介绍cmake:获取GUN编译器的版本,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

GNU编译器(GCC)为编译器所生产系统GNU项目支持各种编程语言。GCC是GNU工具链的关键组件,也是大多数与GNU和Linux有关的项目(包括Linux内核)的标准编译器。在自由软件基金会(FSF)的分配下GCC GNU通用公共许可证(GNU GPL)。作为工具和示例,GCC在自由软件的增长中发挥了重要作用。

实践

   if (CMAKE_COMPILER_IS_GNUCC)execute_process(COMMAND ${CMAKE_C_COMPILER} -dumpfullversion -dumpversionOUTPUT_VARIABLE GCC_VERSION)string(REGEX MATCHALL "[0-9]+" GCC_VERSION_COMPONENTS ${GCC_VERSION})list(GET GCC_VERSION_COMPONENTS 0 GCC_MAJOR)list(GET GCC_VERSION_COMPONENTS 1 GCC_MINOR)message(STATUS "cmake version=${CMAKE_VERSION}")set(GCC_VERSION "${GCC_MAJOR}.${GCC_MINOR}")message(STATUS "gcc version=${GCC_VERSION}")if (GCC_VERSION GREATER "4.7")message(STATUS "gcc version major=${GCC_MAJOR}")message(STATUS "gcc version minor=${GCC_MINOR}")add_definitions("-Wno-implicit-fallthrough")endif()endif()

在这里插入图片描述

其他

CMAKE变量:CMAKE_COMPILER_IS_GNUCC

如果C编译器是 GNU,则为真。

-Wno-implicit-fallthrough

查看gcc版本:

gcc -dumpversion

如果gcc版本号为7,那么源代码的switch-case块中如果忘了加上break,有可能会报错Implicit fallthrough error。解决方法有几种,比如:

  • 更换gcc版本,具体是升级还是降级还需测试。
  • 在报错的switch-case块中加上break。此时要对代码逻辑理解清楚,否则加上break有可能会破坏原来的逻辑。
  • 编译时忽略Implicit fallthrough error这个错误。

笔者采用了第三种方法,即在编译的时候就忽略这个错误。方法是修改objs/Makefile的内容。
下载nginx的源代码并解压缩后,进入nginx目录。此时当前目录下没有Makefile,也没有objs文件夹。执行./configure命令将在当前目录生成Makefile,并且生成objs文件夹,objs文件夹下面也有一个Makefile。当前文件夹下的Makefile主要调用objs/Makefile去执行编译命令。
因此为了解决编译的报错(或报警),需要增加objs/Makefile的编译参数。用vim编辑该文件,看到头几行内容为:
在这里插入图片描述
CFLAGS表示编译的可选参数,我们只需要在后面加上**-Wno-implicit-fallthrough**,即可忽略gcc7编译时switch-case中缺少break的错误。如下图:
在这里插入图片描述

  • cmake:使用execute_process调用shell命令或脚本

这篇关于cmake:获取GUN编译器的版本的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/718127

相关文章

Vue3组件中getCurrentInstance()获取App实例,但是返回null的解决方案

《Vue3组件中getCurrentInstance()获取App实例,但是返回null的解决方案》:本文主要介绍Vue3组件中getCurrentInstance()获取App实例,但是返回nu... 目录vue3组件中getCurrentInstajavascriptnce()获取App实例,但是返回n

SpringMVC获取请求参数的方法

《SpringMVC获取请求参数的方法》:本文主要介绍SpringMVC获取请求参数的方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下... 目录1、通过ServletAPI获取2、通过控制器方法的形参获取请求参数3、@RequestParam4、@

Python获取C++中返回的char*字段的两种思路

《Python获取C++中返回的char*字段的两种思路》有时候需要获取C++函数中返回来的不定长的char*字符串,本文小编为大家找到了两种解决问题的思路,感兴趣的小伙伴可以跟随小编一起学习一下... 有时候需要获取C++函数中返回来的不定长的char*字符串,目前我找到两种解决问题的思路,具体实现如下:

golang获取当前时间、时间戳和时间字符串及它们之间的相互转换方法

《golang获取当前时间、时间戳和时间字符串及它们之间的相互转换方法》:本文主要介绍golang获取当前时间、时间戳和时间字符串及它们之间的相互转换,本文通过实例代码给大家介绍的非常详细,感兴趣... 目录1、获取当前时间2、获取当前时间戳3、获取当前时间的字符串格式4、它们之间的相互转化上篇文章给大家介

浅谈配置MMCV环境,解决报错,版本不匹配问题

《浅谈配置MMCV环境,解决报错,版本不匹配问题》:本文主要介绍浅谈配置MMCV环境,解决报错,版本不匹配问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录配置MMCV环境,解决报错,版本不匹配错误示例正确示例总结配置MMCV环境,解决报错,版本不匹配在col

Python获取中国节假日数据记录入JSON文件

《Python获取中国节假日数据记录入JSON文件》项目系统内置的日历应用为了提升用户体验,特别设置了在调休日期显示“休”的UI图标功能,那么问题是这些调休数据从哪里来呢?我尝试一种更为智能的方法:P... 目录节假日数据获取存入jsON文件节假日数据读取封装完整代码项目系统内置的日历应用为了提升用户体验,

微信公众号脚本-获取热搜自动新建草稿并发布文章

《微信公众号脚本-获取热搜自动新建草稿并发布文章》本来想写一个自动化发布微信公众号的小绿书的脚本,但是微信公众号官网没有小绿书的接口,那就写一个获取热搜微信普通文章的脚本吧,:本文主要介绍微信公众... 目录介绍思路前期准备环境要求获取接口token获取热搜获取热搜数据下载热搜图片给图片加上标题文字上传图片

Linux卸载自带jdk并安装新jdk版本的图文教程

《Linux卸载自带jdk并安装新jdk版本的图文教程》在Linux系统中,有时需要卸载预装的OpenJDK并安装特定版本的JDK,例如JDK1.8,所以本文给大家详细介绍了Linux卸载自带jdk并... 目录Ⅰ、卸载自带jdkⅡ、安装新版jdkⅠ、卸载自带jdk1、输入命令查看旧jdkrpm -qa

Tomcat版本与Java版本的关系及说明

《Tomcat版本与Java版本的关系及说明》:本文主要介绍Tomcat版本与Java版本的关系及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Tomcat版本与Java版本的关系Tomcat历史版本对应的Java版本Tomcat支持哪些版本的pythonJ

使用Python实现获取网页指定内容

《使用Python实现获取网页指定内容》在当今互联网时代,网页数据抓取是一项非常重要的技能,本文将带你从零开始学习如何使用Python获取网页中的指定内容,希望对大家有所帮助... 目录引言1. 网页抓取的基本概念2. python中的网页抓取库3. 安装必要的库4. 发送HTTP请求并获取网页内容5. 解