如何抑制某些 ABI 更改注释(嵌入式 C++)?

adu*_*050 10 c++ gcc

在我的项目中,我收到许多形式为“注意:当启用 C++17 时,类型为‘SomeClass<int, float>’的参数传递更改为与 GCC 10.1 中的 C++14 匹配”的警告。在我更新为使用使用 C++17 标准而不是 C++14 的编译器(来自 Arm GNU 工具链 v11.2 的 gcc-arm-none-eabi)之后,发生了这种情况。

据我所知,此注释指的是纠正涉及传递特定 C++ 模板对象的错误的更改。如果我错了,请纠正我的理解,但我认为我不需要注意注释,因为我使用示例编译器(gcc 11.2)编译项目中的所有依赖项,因此不应该有任何 ABI 差异。因此,我想摆脱这些淹没终端时出现的注释。我找到了一些可能的解决方案:

设置 -Wno-psabi 标志

这有效并将禁用所有 psABI 警告。但是,有时我确实希望收到有关 ABI 更改的通知,如此处所述(GCC 的 -Wpsabi 选项究竟是做什么的?抑制它的影响是什么?)。然而,这个问题的答案也指出,如果我的程序的所有部分都是使用相同的编译器构建的,我永远不需要担心 ABI 更改。我认为我的项目就是这种情况,并且想要确认 - 除了 libstd++ 和 newlib 之外,所有库和应用程序本身都是使用 gcc 11.2 编译的。

-f比较调试第二个

这神奇地让笔记消失了,但我不确定如何或为什么。手册页指出“当将此选项传递给编译器驱动程序时,它会导致跳过第一次编译,这使得它除了调试编译器之外几乎没有什么用处。” (https://gcc.gnu.org/onlinedocs/gcc/Developer-Options.html)这似乎会导致第一个编译传递被跳过,并且只会显示第二个编译传递的输出,这意味着我执行的警告和其他输出想看的可能不会出现?因此我也对使用这个感到担心。

找到某种方法来消除有关 C++14 和 C++17 之间 ABI 参数传递更改的所有注释,但仍启用其他注释

这就是我真正想做的,但不确定是否有办法。