[英]How to create a makefile for several .cpp files with .h files and main.cpp without a .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文件。
更新:
在嘗試Ben Voigt的解決方案后,我得到1錯誤:
您創建目標文件的規則缺少-c
選項,用於“僅編譯”。 因此他們正在嘗試鏈接,但由於沒有main()
而失敗。
然后, all
目標為每個編譯單元命名一個可執行文件。 同樣,這是錯誤的,因為它們都沒有main()
。 您應該只有一個可執行文件。 all
還應該配置為phony目標,因為它不會構建名為all
的實際文件。
您的所有規則都無法控制輸出文件的名稱。
您的所有規則均未通過標記。
您的規則缺少對標頭的依賴性,因此編輯標頭不會導致正確的文件重新編譯。
確實,您應該擺脫編譯和鏈接規則,而make
使用其內置規則。 專注於您的構建目標和依賴項。
您的最終makefile應該看起來像這樣(當然,使用空格而不是制表符)
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
大膽的猜測:在包含adjacencyList.h之前,您可能在某個地方缺少分號。 檢查每個頭文件,並確保每個類定義均以分號正確終止
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.