【问题标题】:Specific compilation flags with autotools and static library带有自动工具和静态库的特定编译标志
【发布时间】: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

感谢您的帮助

【问题讨论】:

    标签: automake compiler-flags


    【解决方案1】:
    #pragma clang diagnostic push
    #pragma clang diagnostic ignored "-Wsuggest-override"
    #include <pugixml/pugixml.hpp>
    #pragma clang diagnostic pop
    

    ...

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

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

    【讨论】:

    • +1,谢谢您的回答。我想知道是否没有办法告诉 automake“这个头文件属于这个库,所以如果它被包含,请使用适当的标志”
    • 好的,我明白你现在得到了什么。不幸的是,答案是否定的,automake 做不到。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-06
    • 1970-01-01
    • 2013-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多