2012-04-03 16 views
1

コンパイルエラーが発生しています。私は1つのcppファイルと多くのヘッダーを持っています。メイクファイルの場合、私はすべてのヘッダファイルをリストする必要があると思った。 LinkedBinaryTree.hには他のすべてのヘッダーファイルのインクルードが含まれています。これは私が書いたもの:C++ makefile複数のヘッダーを1つのcpp

all: hw4a 

hw4a: LinkedBinaryTree.cpp linkedBinaryTree.h booster.h arrayQueue. binaryTree.h  binaryTreeNode.h myExceptions.h queue.h 
g++ -o hw4a LinkedBinaryTree.cpp LinkedBinaryTree.h booster.h arrayQueue.h binaryTree.h  binaryTreeNode.h myExceptions.h queue.h 

clean: 
rm hw4a 

私はOがちょうど行うために必要なことを言われた:

g++ LinkedBinaryTree.cpp -o bst.exe 

どちらが正しいのですか?

答えて

0

あなたが聞いたことはありますか?含まれている必要があり、別の単位としてコンパイルされていない。

2

後者は正しい:g++ -o result.exe source.cppです。 ではなく、は、プリプロセッサによって自動的にインクルードされるため、コンパイラコマンドのヘッダファイルをインクルードする必要があります。

もちろん、ヘッダファイルはまだの依存関係であり、メイクファイルにリストされている必要があります。 ;あなたが必要として、

.phony: all clean 

all: result.exe 

result.exe: main.o 
    $(CXX) -o [email protected] $+ 

main.o: main.cpp class1.hpp lib2.hpp 
    $(CXX) -c -o [email protected] $< 

$+は($^もすべての依存関係に展開されますが単一化繰り返しで)「すべての依存性」を意味しますのみ最初リファレンスを参照するための特別なユニバーサルな構文がある理由ですコンパイルに必要なときに$<は "最初の依存関係"を意味します。

コンパイル時に警告フラグを撒き散らします。

関連する問題