2013-09-16 149 views
0

保持這個make文件說:「沒有規則,使目標的/Main.cpp',通過‘Main.o’無規則的Makefile(GCC編譯)目標

HOME = /home/ 
    CC = g++ -Wall -pedantic 
    PROJ = $(HOME)/Proj1 
    INCL = -I $(PROJ) 
    all: main.x 
    main.x: List.o Summary.o Main.o 
    <TAB>:$(CC) -o main.x List.o Summary.o Main.o 
    List.o: $(PROJ)/List.h $(PROJ)/List.cpp 
    <TAB>$(CC) -c $(INCL) $(PROJ)/List.cpp 

    Summary.o: $(PROJ)/Summary.h $(PROJ)/Summary.cpp 
    <TAB>$(CC) -c $(INCL) $(PROJ)/Summary.cpp 


    Main.o: $(PROJ)/Main.cpp 
    <TAB>$(CC) -c $(INCL) $(PROJ)/Main.cpp 
    clean: 
    <TAB>rm -rf *.o *~ *.x 

由於需要得到一個錯誤!

+1

您確定這完全是您正在使用的makefile以及您看到的_exact_錯誤嗎?它看起來像你拼錯或重置'PROJ'變量,因此前提條件'$(PROJ)/ Main.cpp'只擴展到'/ Main.cpp'。 – MadScientist

+0

這個Makefile看起來沒問題。你已經編輯了它,加入'< TAB >',還有什麼你編輯過的,或者這是你實際使用的完全相同的Makefile嗎? – nos

+0

這是我使用的確切的makefile。剛剛從proj擴展中取出我的姓氏 – Rob

回答

0

確保/home/Proj1/Main.cpp是存在的,否則的Makefile看起來很好。 $(PROJ)/Main.cpp點/home/Proj1/Main.cpp

1

有兩種我看到的可能性,第一個是你在PROJ變量定義的末尾有一些額外的空白,在make中,所有的額外行尾的空格被保留。 ( - 雖然沒有引號包括空格)變量的

PROJ = $(HOME)/Proj1 # some whitespace at the end 

值將是'$(HOME)/Proj1 ':所以,如果你寫這個。然後,當你在你的先決條件列表中使用它:

Main.o: $(PROJ)/Main.cpp 

它擴展爲:

Main.o: $(HOME)/Proj1 /Main.cpp 

這是兩個不同的先決條件:目錄,和不存在的文件/Main.cpp

如果不是這樣,那麼您向我們展示的makefile與您正在使用的makefile有所不同,因爲您向我們展示的makefile不應顯示該錯誤。