2017-01-07 9 views
-2

makeを使用してC++ファイルをコンパイルしようとしています。しかし、デフォルトでは-std = C++ 11フラグを使用していません。 C++ 11の特定の機能を使用するプログラムをコンパイルする必要があるときは、g ++を使って明示的にコンパイルする必要があります。makeはg ++の-std = C++ 11オプションを使用していません

私はシステム上のすべてのC++ファイルに対して-std = C++ 11オプションを自動的に使用する方法を尋ねます。

g ++のグローバルmakefileを変更する必要がある場合、Linux Mint 18のmakefileの場所は何ですか?変更または追加する必要はありますか?

自分でMakefileを作成する必要はありますか?

EDIT 1:私は

make myfile

ようにし、唯一の.cppファイルとディレクトリでのバイナリがあります呼び出しています。私はディレクトリにMakefileを持っていません。

EDIT 2:ここで、myfileは、コンパイルしたいC++ファイルの名前です。

-dオプションを付けてmakeを実行すると、以下の出力が表示されます(かなり長いため、出力のすべてを貼り付けることができず、本体サイズの上限を超えています。 )。 Image 1
この画像(2)には、最後からいくつかの行があります。
Image 2

私は意図的になるようにメイクを作るために何かを見つけたファイル"MagicalWord.cpp"に変更を行いました!

+0

どのようにmakeコマンドを呼び出すのですか、実行しているディレクトリの内容は何ですか? – taskinoor

+0

myfileとは何ですか? – taskinoor

+0

'-d'オプションをつけてmakeを実行すると、' Makefilesを読む... 'のような行が表示されます。 バージョン情報を印刷した後にメイクファイル' Makefile '...'を読み込んでいます。それはどのファイルですか? – taskinoor

答えて

1

"global makefile"はありません。makeのすべての呼び出しでデフォルトのフラグを変更する方法はありません(あなたがGNU makeを編集してコンパイルしない限り、この状況では悪い考えです) 。あなたのメイクファイル(複数可)で

、行を追加します。

CXXFLAGS += -std=c++11 

あなたは物事をコンパイルするための組み込みのルールを使用している、またはあなたが独自のルールと標準変数を使用していると仮定すると、それはあなたが必要とすることをするでしょう。

これがうまくいかない場合は、メイクファイル、またはC++ソースファイルをビルドするために使用するルールを参照する必要があります(-d出力は役に立ちません。ファイルあなたがそうでなければならないと思っていたか、そうでなければならないと考えていた)。

1

すべてのC++プロジェクトにシステム全体の言語を設定することは、必ずしも良い考えではありません。代わりに、あなたがしたい任意のコンパイラオプションを指定するMakefileを定義します。

CXXFLAGS := -std=c++11 $(CXXFLAGS) 

C++プログラム(あなたがGNUのルールを作成し、デフォルトを使用していると仮定)をコンパイルするときCXXFLAGSは、あなたのコンパイラに渡されます。

target.cppファイルをtarget実行可能ファイルにコンパイルするために、現在の作業ディレクトリにMakefileが存在する場合は、make targetを実行できるようになりました。 Makefileは、あなたがそれへのパスを指定する必要があり、別のディレクトリにある場合:

make -f path/to/your/Makefile target 

あなただけの1つの実行のために余分なパラメータを追加したい場合は、コマンドラインで環境変数またはメーク変数を設定することができます:

# environment: 
CXXFLAGS='-std=c++11' make target 

# make variable: 
make target CXXFLAGS='-std=c++11' 

g++ -std=c++11 target.cpp -o targetまたは同等のものが実行されます。

理論上、シェルプロファイルをexport CXXFLAGS='-std=c++11'に編集すると、実行するすべてのプログラムで環境変数を使用できるようになります。実際には、コンパイラオプションを環境変数で設定すると、解決するよりも多くの問題が発生する傾向があります。

これらのすべての解決策のうち、通常のMakefileを書くことははるかに簡単な方法です。そうすれば、すべてのビルド構成が1か所に完全に自動化されます。

関連する問題