技艺实践程序员

推荐一招:gcc如何忽略第三方库引发的告警

2018-02-28  本文已影响51人  而立不惑之年

问题提出


业务代码使用了google buffer以后,编译时会有大量告警,导致CI失败。告警如图:


编译告警

问题解决


在CMake中可以在CMakefiles实现目录和文件来忽略告警。

set_property(
        SOURCE PythonHelper.cpp
        APPEND_STRING
        PROPERTY COMPILE_FLAGS
        "-Wno-shadow -Wno-conversion -Wno-sign-conversion -Wno-format-security -Wno-format-nonliteral"
)
set(CMAKE_CXX_FLAGS_DEBUG "-D_DEBUG")

因为头文件的包含关系,很多时候处理时会扩大范围,导致忽略的太多,操作起来不方便。利用代码可以精准实现忽略处理,思路:
参考《6.61.12 Diagnostic Pragmas》可以解决。示例代码:

#ifdef __GNUC__
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wall"
#pragma GCC diagnostic ignored "-Wconversion"
#pragma GCC diagnostic ignored "-Wsign-conversion"
#pragma GCC diagnostic ignored "-Wshadow"
#endif
#include <google/protobuf/descriptor.h>
#include <google/protobuf/message.h>
#ifdef __GNUC__
#pragma GCC diagnostic pop
#endif

特殊情况说明

#pragma GCC diagnostic ignored "-Wall -Wformat=2 -Wconversion -Wsign-conversion -Wshadow"
//编译错误
#pragma GCC diagnostic ignored "-Wformat=2"
//正确
#pragma GCC diagnostic ignored "-Wformat"
错误
上一篇 下一篇

猜你喜欢

热点阅读