gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:07:48 25 4
gpt4 key购买 nike

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

第一种方法是使用#pragma:

#pragma gcc diagnostic ignored "-Wunused-parameter"

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

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

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

有没有编译器选项,类似于-isystem,可以一揽子添加,不会添加到搜索路径,但只有在以下情况下才会排除警告该路径恰好已包含在搜索路径中?

最佳答案

I have a large project with many compilation targets, some of which use particular third party libraries which cause problems for my compiler. For reasons I cannot use the #pragma option.

您能详细说明一下吗?为什么带有 #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 源代码中没有看到任何允许在不添加新系统 header 的情况下重置系统 header 标志的内容。无论如何,在我看来,这看起来像是可以在构建系统中合理解决的问题。

关于C++ 编译器标志忽略外部库的警告但不包含目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46945571/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com