2016-12-18 14 views
0

私はMakefileを作成しようとしていますが、本当に苦労しています。私は3つのファイルを持っています。 main.cpp、garage.cpp、およびgarage.hpp。次のコマンドは動作しますが、私はmakefileに変換する方法を理解できません。どんな助けでも大歓迎です。 -std = C++ 0xは、それを削除して別のものに置き換えるとコンパイルされないので重要です。再度、感謝します。C++のMakefileヘッダーとcpp

(第2行は、単一のタブになる前に必ずスペースを作る)これを実行する最も簡単な方法は、ちょうどあなたのMakefileでこれを持っていることです

g++ -std=c++0x -Wall -o main main.cpp garage.hpp garage.cpp 
+0

RTFM、https://www.gnu.org/software/make/manual/make.html。 – Stargateur

答えて

0

作業:

all: 
    g++ -std=c++0x -Wall -o main main.cpp garage.hpp garage.cpp 

この確かに最良の方法ではありませんが、コンパイルしたいだけなら、これがあなたの解決策です。 makeファイルに関するチュートリアルを読んで、より詳細な理解を得てください。

1

Makefileはコードをコンパイルするのに非常に効果的です。 Makefileはタイムスタンプを使ってファイルの変更を検出し、変更されたファイルだけをコンパイルします。これにより多くの時間を節約できます。

以下は、あなたの仕事を完璧にしてくれます。 g++rmコマンドの前

output: main.o garage.o 
     g++ -std=c++0x -Wall main.o garage.o -o output 

main.o: main.cpp 
     g++ -c main.cpp 

garage.o: garage.cpp garage.hpp 
     g++ -c garage.cpp 

clean: 
     rm *.o output 

スペースがタイプmakeをコンパイルするMakefile としてtab

名このファイルです。これはFYI、それがコンパイル/リンク行にヘッダファイル(garage.hpp)を追加する権利はありませんoutput

という名前の実行ファイルを作成し、./output

3

を使用して実行可能ファイルを実行します。ソースファイル(.cpp)のみをコンパイル行に入れる必要があります。

@ gowrathの解決策はわかりやすいですが、コマンドラインソリューションとまったく同じです。makeの機能を利用していません。 makefileを使うよりも、シェルスクリプトやエイリアスを書く方が簡単です。

@ Rahulのソリューションはすべてのことを綴りますが、makefileを書くときにタイピングや作業を減らすためのmakeの機能を利用していません。

実際には、多数の組み込みルールがあります。それらをカスタマイズするには、標準変数の値を設定するだけで、残りの作業はmakeが行います。あなたはこのメイクファイルを書くことができます:

CXX = g++ 
CXXFLAGS = -std=c++0x -Wall 

OBJECTS = main.o garage.o 

main: $(OBJECTS) 
     $(CXX) $(CXXFLAGS) -o [email protected] $^ 

$(OBJECTS): garage.hpp 

リンク規則は、ターゲット(main)または前提条件(main.ogarage.o)を再入力することを避けるためにautomatic variablesを使用しています。

最後の行で、garage.hppファイルが変更された場合、makeはソースファイルを再コンパイルする必要があることを確認します。 がソースファイルをコンパイルする方法を教えてくれるルールを書く必要はありません。すでにそれを行う方法は分かっています。

+0

'main.o'や' garage.o'を作るためのルールはありません。 – Zereges

+1

私の最後の段落を見てください:_あなたがソースファイルをコンパイルする方法を教えてくれるルールを書く必要はありません。それはすでにそれを行う方法を知っています。 – MadScientist

関連する問題