2017-05-17 12 views
0

TL; DR:特定のフラグセットで外部ライブラリをコンパイルすると、ヘッダーをインクルードするときに自分のコードをコンパイルするために使用されるフラグによって引き起こされる警告をどう対処できますかこのライブラリ?autotoolsとスタティックライブラリを使用した特定のコンパイルフラグ

私はプロジェクトのビルドシステムとしてautotoolsを使用しています。ターゲットに応じてコンパイルフラグを適切に設定したいと思います。

何らかの高レベルの警告(コンパイラからのデバッグ/バグの防止の助けがあればいつでも歓迎します)で自分のソースをコンパイルしたいと思います。 現在使用されている警告フラグには、例として取り上げる-Wsuggest-overrideがあります。私の情報源以外にも、私が持っている

私はのはの情報ページには二つの別々のフラグのセット、 を持っているために-Ofast

としましょう、とコンパイルしたいの外部ライブラリ(あなたが本当に知りたい場合pugixmlautomake具体的な例がある興味深いセクション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 

これはうまくいきます。ライブラリはフラグのセットでビルドされています。私のソースは別のものですが、すべてがOKです...

まで私の情報源でライブラリのヘッダと、私はこれを掲示しています理由です(長すぎる?)質問

main.cc:

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

int main() { return 0; } 

コンパイル時には、-Wsuggest-overrideは、ライブラリのソースでトリガされ

公式automakeの解決策は、このケースでは適用されない異なる警告セットを持っていますか、何か間違っていますか?

automakeバージョン (気分に応じて)私はそれが重要かどうかわからないが、私はg++および/またはclangを使用しています:あなたの助けのための1.15

おかげautomakeは(GNUのautomakeは)

答えて

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

...

これらの例では通常clangとしていますか。

これがどのようにautomake問題であるかわかりません。昇格された警告なしにコンビニエンスライブラリをコンパイルしています。依存性ヘッダーを高められた警告で使用するコード。ちょうどmake、またはcmake、またはコマンドラインを使って構築した場合、同じ問題が発生します。

+0

+1、あなたの答えをありがとう。私はautomakeに "このヘッダーがこのライブラリに属しているので、もしそれが含まれていれば、適切なフラグを使用してください"と言う方法がないのだろうかと疑問に思っていた。 – Zermingore

+0

OK、残念ながら、答えは「いいえ、automakeはできません。 – ldav1s