据我所知,有两种方法可以忽略外部库的警告。
第一种方法是使用#pragma
:
#pragma gcc diagnostic ignored "-Wunused-parameter"
第二种方法是将-isystem/path/to/system/lib
添加到编译器标志中。这标记特定包含路径作为外部包含路径,因此编译器不会发出源自那些包含的警告。
我有一个包含许多编译目标的大型项目,其中一些使用特定的第三方库,这会导致编译器出现问题。出于原因,我无法使用#pragma
选项。
但是如果我使用-isystem
作为所有构建目标的一揽子编译器标志,那么我将不幸地为每个其他构建目标包含/path/to/system/lib
,即使那些不使用该系统库的目标也是如此。这意味着其他目标将搜索那些外部库,这是不可取的。
是否有一个编译器选项,类似于-isystem
,可以一揽子方式添加,不会添加到搜索路径,但只会在路径发生时排除警告已经包含在搜索路径中?
答案 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源代码中的任何内容,这样可以在不添加新系统头的情况下重置系统头标志。在任何情况下,这看起来都像是在构建系统中可以合理解决的问题。