带有 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 的代码。如果您仅使用 make
、cmake
或命令行构建它们,您会遇到同样的问题。
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 的代码。如果您仅使用 make
、cmake
或命令行构建它们,您会遇到同样的问题。