2016-07-07 12 views
2

デフォルトのgccコンパイラオプションが、異なるデフォルトのコンパイラオプションを期待できる場所に変更できるかどうかは疑問です。デフォルトのコンパイラオプションは、gccのバージョンによって異なります(gcc 4.6 - > gcc 4.8など)か、それらは常に同じですか?デフォルトのコンパイラオプションは、OSのバージョンによって異なります(例:Ubuntu 12.04 - > 14.04)。デフォルトのgccコンパイラオプションは、gccのバージョン固有か、OS固有か、あるいはその両方ですか?

私は、UbuntuやDebianのような2つの異なるOSに関して、デフォルトのコンパイラオプションが異なると思いますよね?

+0

UbuntuはDebianをベースにしています。 – Olaf

+0

@Olaf ...しかしDebianの岩;) – LPs

+0

これは必然的にデフォルトのコンパイラオプションが同じであることを意味しますか? – Maximilian

答えて

3

はい、通常、デフォルトのフラグはかなり異なると予想できます。幸いにも、フラグが何であるかを知る必要はなく、フラグを設定する必要はありません。

UbuntuはDebianに非常に密接に基づいているので、UbuntuとDebianはかなり似ています。しかし、GCCが使用する実際のオプションはかなり技術的なので、さまざまなオプションがあります。あなたは次のことを実行することにより、それらを見ることができます。

gcc -Q -v -x c -c /dev/null 

これは、Cプログラム(-x c -c /dev/null)として/dev/nullをコンパイルし、開発者向け情報(-Q -v)の束をプリントアウトするためにGCCを要求します。私はGCC 4.4、4.6、4.8でこれを実行し、異なる結果を得ました。私のマシン上で

> -faggressive-loop-optimizations 
> -fgnu-runtime 
> -fgnu-unique 
< -finline-functions-called-once 
> -finline-atomics 
> -fira-hoist-pressure 
> -fsync-libcalls 
> -ftree-coalesce-vars 
< -fvect-cost-model 
> -mfxsr 
> -mlong-double-80 

は、GCCが異なる80使用しています。ここでは

< -falign-loops 
< -fargument-alias 
> -fdelete-null-pointer-checks 
> -fprefetch-loop-arrays 
> -fsched-critical-path-heuristic 
> -fsched-dep-count-heuristic 
> -fsched-group-heuristic 
> -fsched-last-insn-heuristic 
> -fsched-rank-heuristic 
> -fsched-spec-insn-heuristic 
> -fshow-column 
> -fstrict-volatile-bitfields 
> -ftree-forwprop 
> -ftree-loop-if-convert 
> -ftree-phiprop 
> -ftree-pta 
> -ftree-slp-vectorize 
> -fvar-tracking-assignments 
< -mfused-madd 

私のマシン上のバージョン4.6から4.8への差分がされています。ここに私のマシンで4.4と4.6のオプションの違いはC!コンパイル時のデフォルトのオプションオプションは、C++をコンパイルしたり、異なるプラットフォームでコンパイルしたりするときにも変更されます。

でも、大丈夫です。あなたは基本的にこれらのオプションをすべて無視して、さまざまな-W警告フラグ、-O最適化フラグ(実際には、あらかじめ選択されたトンのショートカットです。-fフラグと私のコンピュータのいくつかの-m-O2は63の追加のフラグを有効にします)!-gデバッグデータフラグ。

そしてもちろん、基本的なフラグなど-std=-c-o-l-I

ように私は意味、あなたは本当に-fbranch-count-regが何を知っておく必要がありますか?あんまり。

0

automakeなどのツールを活用して、アプリケーションのMakefileをビルドすることをお勧めします。このツールは、環境に応じてさまざまな方法でファイルを構築できます。そのメイクファイル内で、は、あなたにとって重要なオプションをと指定します。デフォルトにしないでください( "チャンス")。

+1

この回答はどのように質問に関連していますか.... O.o ??? – LPs

+0

私が読んだように、「デフォルトのオプションは異なるのですか」という質問だけではありませんでした。*「どこで別のコンパイラオプションを期待できますか? 「すべての場合に何が起こるのか、どうすればわかるのだろうか?だから私は返答しようとしています:*(a)* Automakeを使い、*(b)*デフォルトに頼るのではなく、関連性のあるものをすべて指定します。 **今、**あなた*知っている*すべての場合に何が起こるか。ユーザーは 'configure && make'プロシージャを実行します。これは使い慣れたもので、何が起こるかを完全に制御できます。 –

+0

OPは_default gccコンパイラオプションを要求しています_ ...どのように地球をautomakeで変更できるのですか? – LPs

関連する問題