带有 autotools 和静态库的特定编译标志

Specific compilation flags with autotools and static library

TL;DR: 当我用一组特定的标志编译外部库时,当我包含这个的 headers 时,如何处理由用于编译我自己的代码的标志触发的警告图书馆 ?

我在项目中使用 autotools 作为构建系统,我想根据目标正确设置编译标志。

我想编译我自己的源代码并带有某种程度的高级别警告(总是欢迎编译器提供任何调试/防止错误的帮助)。 在当前使用的警告标志集中有-Wsuggest-override,我将以此为例。

除了我的资源,我还有一个外部库(pugixml 如果你真的想知道的话)我想用它来编译,比方说 -Ofast

要有两组独立的标志, automake 的信息页面中有一个有趣的部分,其中包含一个具体示例 Per-Object Flags: How to simulate per-object flags?。 (关于这个话题也有一些SO问题)

这就是为什么在我的 Makefile.am 中有以下内容:

__top_srcdir__bin_LDADD = libpugixml.a
noinst_LIBRARIES = libpugixml.a
libpugixml_a_SOURCES = pugixml/pugixml.cpp
libpugixml_a_CPPFLAGS = -Ofast

程序源集不再包含库源:

__top_srcdir__we_SOURCES = main.cc

这很好用,库是用一组标志构建的,我的源是另一个,一切正常...

直到我在我的资源中包含一个 header 图书馆,这就是我发布这个(太长?)问题的原因

main.cc:

#include <pugixml/pugixml.hpp> // -Wsuggest-override triggered

int main() { return 0; }

编译过程中,-Wsuggest-override在库源中被触发

官方 automake 解决不同警告集的方法是否不适用于这种情况,还是我做错了什么?

我不确定这是否重要,但我正在使用 g++ and/or clang(取决于心情) automake 版本:automake (GNU automake) 1.15

感谢您的帮助

#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wsuggest-override"
#include <pugixml/pugixml.hpp>
#pragma clang diagnostic pop

...

在这些情况下我通常会用 clang 做什么。

我不明白这是一个 automake 问题。您正在编译没有提升警告的便利库,以及使用带有提升警告的依赖项 header 的代码。如果您仅使用 makecmake 或命令行构建它们,您会遇到同样的问题。