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

C++ compiler flag to ignore warnings for external libraries but without including directory

本文关键字:警告 不包括 标志 编译器 外部 C++      更新时间:2023-10-16

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

第一种方法是使用#pragma:

#pragma gcc diagnostic ignored "-Wunused-parameter"

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

我有一个大型项目,有很多编译目标,其中一些使用特定的第三方库,这会给我的编译器带来问题。由于某些原因,我无法使用#pragma选项。

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

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

我有一个大型项目,有许多编译目标,其中一些使用特定的第三方库,这会给我的编译器带来问题。由于某些原因,我无法使用#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。)你只会在跨越子系统边界时应用它;子系统本身将使用CCD_ 10进行编译。

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