C ++编译器标志,用于忽略外部库的警告,但不包括目录

时间:2017-10-26 03:49:24

标签: c++ gcc compilation clang

据我所知,有两种方法可以忽略外部库的警告。

第一种方法是使用#pragma

#pragma gcc diagnostic ignored "-Wunused-parameter"

第二种方法是将-isystem/path/to/system/lib添加到编译器标志中。这标记特定包含路径作为外部包含路径,因此编译器不会发出源自那些包含的警告。

我有一个包含许多编译目标的大型项目,其中一些使用特定的第三方库,这会导致编译器出现问题。出于原因,我无法使用#pragma选项。

但是如果我使用-isystem作为所有构建目标的一揽子编译器标志,那么我将不幸地为每个其他构建目标包含/path/to/system/lib,即使那些不使用该系统库的目标也是如此。这意味着其他目标将搜索那些外部库,这是不可取的。

是否有一个编译器选项,类似于-isystem,可以一揽子方式添加,不会添加到搜索路径,但只会在路径发生时排除警告已经包含在搜索路径中?

1 个答案:

答案 0 :(得分:1)

  

我有一个包含许多编译目标的大型项目,其中一些使用特定的第三方库,这会导致编译器出现问题。出于原因,我无法使用#pragma选项。

你能详细说明吗?为什么包含#pragma GCC diagnostic的包装头不是一个选项?就是这样:

#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wunused-parameter"
#include </path/to/real/include.h>
#pragma GCC diagnostic pop

(或者,如果你想获得幻想,请使用#include_next。)只有在跨越子系统边界时才应用它;子系统本身将使用-Wunused-parameter进行编译。

我没有看到GCC / libcpp源代码中的任何内容,这样可以在不添加新系统头的情况下重置系统头标志。在任何情况下,这看起来都像是在构建系统中可以合理解决的问题。