【发布时间】:2017-05-17 19:36:56
【问题描述】:
TL;DR:当我用一组特定的标志编译外部库时,当我包含该库的标头时,如何处理由用于编译我自己的代码的标志触发的警告?
我在项目中使用 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
这很好用,库是用一组标志构建的,我的源是另一个,一切都很好......
直到我在我的来源中包含图书馆的标题,这就是我发布这个(太长?)问题的原因
main.cc:
#include <pugixml/pugixml.hpp> // -Wsuggest-override triggered
int main() { return 0; }
在编译期间,库源中会触发-Wsuggest-override
官方automake 解决方案是否有不同的警告集不适用于这种情况,还是我做错了什么?
我不确定这是否重要,但我正在使用g++ 和/或clang(取决于心情)
automake 版本:automake (GNU automake) 1.15
感谢您的帮助
【问题讨论】: