2014-10-10 49 views
0

我:如何創建與.h文件和幾個main.cpp的.cpp文件生成文件沒有.H

main.cpp 
distance.cpp 
distance.h 
adjacencyList.cpp 
adjacencyList.h 

這裏是我的makefile:

all: distance main adjacencyList 
    g++ distance.o main.o adjacencyList.o 

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

adjacencyList.o: adjacencyList.cpp 
    g++ adjacencyList.cpp -lstdc++ 

distance.o: distance.cpp 
    g++ distance.cpp -lstdc++ 

clean: 
    rm -rf *.o all 

我得到這個錯誤。所以我很確定我在main中做了一些錯誤,因爲它不是像其他兩個類一樣的類,也沒有.h文件。

enter image description here

更新:

努力奔福格特的解決方案後,我得到1個錯誤:

enter image description here

+0

執行以下命令? g ++ distance.cpp adjacencyList.cpp main.cpp -lstdC++ – nrcrast 2014-10-10 05:21:59

+0

不,我得到一堆警告,然後我得到3個錯誤:main.cpp:27:錯誤asystema未在此範圍內聲明main.cpp:70:錯誤:aatoia沒有在這個範圍內聲明 – Elephant 2014-10-10 05:27:15

+0

@Elephant:那麼你需要添加'#include '到main.cpp那麼,它是否工作? – 2014-10-10 05:30:11

回答

1

對於「僅編譯」,您的創建目標文件的規則缺少-c選項。所以他們試圖鏈接,並且因爲沒有main()而失敗。

然後,您的all目標爲每個編譯單元命名一個可執行文件。再次,這是錯誤的,因爲他們並不都有main()。你應該只有一個可執行文件。 all也應該配置爲虛假目標,因爲它不會構建名爲all的實際文件。

您的所有規則都無法控制輸出文件的名稱。

您的所有規則都無法通過標誌。

您的規則缺少頭文件的依賴關係,因此編輯頭文件不會導致正確的文件被重新編譯。

真的,你應該擺脫編譯和鏈接規則,並讓make使用其內置的。關注你的構建目標和依賴關係。

您的最終生成文件應該是這個樣子(當然,使用空格而不是製表符)

all : main 

.PHONY : all clean 

CC = g++ 
LD = g++ 

main : main.o adjacencyList.o distance.o 

main.o: main.cpp adjacencyList.h distance.h 

adjacencyList.o: adjacencyList.cpp adjacencyList.h 

distance.o: distance.cpp distance.h 

clean: 
    rm -rf *.o main 
+0

謝謝,我會查看這些要點。由於我只看過make文件幾個小時,所以我基本上試圖獲得一個簡單的makefile來完成作業。 – Elephant 2014-10-10 05:43:01

+0

我試過你的解決方案,我仍然遇到了一個我正試圖解決的錯誤。如果您有時間查看,那是我最新的問題。謝謝。 – Elephant 2014-10-10 05:57:30

0

大膽猜測:有可能你缺少一個分號在包含adjacencyList.h之前的某個地方。 檢查每個頭文件並確保每個類定義都用分號正確終止

+0

檢查:我的包括都像3 - 4線下來。所以沒有分號丟失。 – Elephant 2014-10-10 05:19:38

+0

@Damien:他沒有編譯錯誤。 – 2014-10-10 05:26:00

+0

好趕本。我沒有注意到那 – 2014-10-10 05:27:16