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

时间:2017-05-17 19:36:57

标签: automake compiler-flags

TL; DR:当我使用一组特定的标志编译外部库时,如何处理在我包含此库的标题时用于编译自己的代码的标志触发的警告?

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

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

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

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

这就是为什么在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

这个工作正常,库是用一组标志构建的,我的源代码是另一个,一切都好......

直到我在我的来源中包含图书馆的标题,这就是为什么我发布这个(太长了?)问题

main.cc:

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

int main() { return 0; }

在编译期间,在库源

中触发-Wsuggest-override

官方automake解决方案是否有不同的警告不适用于这种情况或我做错了什么?

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

感谢您的帮助

1 个答案:

答案 0 :(得分:1)

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

...

我通常会在这些情况下使用clang执行此操作。

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