1

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

 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

どちらが正しいですか?

4

2 に答える 2

2

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

もちろん、ヘッダーファイルはまだ依存関係であり、makefileにリストする必要があります。そのため、最初の参照のみを参照するための特別なユニバーサル構文があります。

.phony: all clean

all: result.exe

result.exe: main.o
    $(CXX) -o $@ $+

main.o: main.cpp class1.hpp lib2.hpp
    $(CXX) -c -o $@ $<

意味は、リンクが必要な場合は「すべての$+依存関係」(繰り返しあり$^、一意化されているがすべての依存関係にも拡張されます)を$<意味しますが、コンパイルが必要な場合は「最初の依存関係」のみを意味します。

その間、コンパイラコマンドに寛大な警告フラグを振りかけます。

于 2012-04-03T22:27:20.820 に答える
0

言われたこと。個別のユニットとしてコンパイルされるのではなく、インクルードを含める必要があります。

于 2012-04-03T22:23:18.077 に答える