簡體   English   中英

如何為帶有.h文件的幾個.cpp文件和不帶有.h的main.cpp創建一個makefile

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM