如何避免为第三方标头应用编译标志

auz*_*uzn 4 c++ gcc cmake eigen

我们想要添加-Werror=conversion到我们的代码库中,但是 Eigen 库的标头会触发很多此类错误。我想知道这里最好的方法是什么,以便编译标志仅适用于我们的代码,但不适用于第三方标头。

我们正在考虑的一种解决方案是为 Eigen 创建一个包装器库,其中仅包含我们需要的内容。我们将编译没有标志的包装器。但这是一项艰巨的任务。我想知道是否还有其他解决方案。

for*_*818 6

使用 gcc,您可以通过 包含 Eigen 标头-isystem。它们将被视为系统标头,并且不会报告任何警告。这会消除所有警告,但对于经过良好测试的第三方库来说,这通常是可以的。


bit*_*ask 6

您可以使用以下命令创建标头 Eigen.h:

#pragma once

#ifdef __GNUC__
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wconversion"
#endif

#include <Eigen/Core>
// ...

#ifdef __GNUC__
#pragma GCC diagnostic pop
#endif
Run Code Online (Sandbox Code Playgroud)