2012-04-03 64 views
1

我正在編譯錯誤。我有一個cpp文件和許多標題。對於makefile我想我需要列出所有的頭文件。 LinkedBinaryTree.h包含所有其他頭文件的包含。這是我寫的:C++ makefile多個頭一個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 

有人告訴我,剛剛Ø需要做:

g++ LinkedBinaryTree.cpp -o bst.exe 

哪一個是正確的?

回答

0

你被告知。包括應包括在內,不作爲單獨的單位編制。

2

後者正確:g++ -o result.exe source.cpp。您必須而不是在編譯器命令中包含頭文件,因爲它們已被預處理器自動包含。

當然的頭文件仍依賴,必須在Makefile中列出。這就是爲什麼有一個特殊的通用語法指只有第一參考:

.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] $< 

$+意思是「依賴條件」(與重複; $^也擴展到所有的依賴,但uniquified),因爲你需要的鏈接,而$<只意味着「第一次依賴」,因爲你需要編譯。

當你在它的時候,灑在您的編譯器命令慷慨的警告標誌。