2010-09-02 68 views
0

我有這個Makefile並在每行確定單獨運行,但是當我做make我得到這個錯誤:問題與我的makefile

make: *** No rule to make target `CoalitionManipulation‬‬.cpp', needed by `CoalitionManipulation‬‬.o'. Stop. 

但我可以看到CoalitionManipulation.o文件,這意味着它的存在! 貝雷是生成文件:

CoalitionManipulation‬‬ : ‫‪CoalitionManipulation‬‬‬‬.o PrintQ3.o ChooseRandomBit.o 
    g++ -Wall -lm PrintQ3.o ChooseRandomBit.o CoalitionManipulation.o -o ‫‪CoalitionManipulation‬‬ 

CoalitionManipulation‬‬.o : CoalitionManipulation‬‬.cpp ChooseRandomBit.h PrintQ3.h 
    g++ -Wall -c CoalitionManipulation.cpp -o CoalitionManipulation‬‬.o 

PrintQ3.o : PrintQ3.h PrintQ3.cpp 
    g++ -Wall -c PrintQ3.cpp -o PrintQ3.o 

ChooseRandomBit.o : ChooseRandomBit.cpp ChooseRandomBit.h 
    g++ -Wall -c ChooseRandomBit.cpp -o ChooseRandomBit.o 

問題是什麼?

回答

3
make: *** No rule to make target `CoalitionManipulation‬‬.cpp', needed by `CoalitionManipulation‬‬.o'. Stop. 

製作找不到CoalitionManipulation.cpp。這是你告訴它的地方嗎?

+0

我所有的文件都在相同的位置,包括Makefile – 2010-09-02 15:33:06

3

如果您使用gmake(很有可能),您可以將CXXFLAGS定義爲-Wall,並跳過大部分.o規則(知道如何處理.cpp文件)。實際上,您可以將規則留空,但仍可以毫無問題地指定標頭依賴關係。

編輯:這是一個比最初有什麼不同的錯誤...嘗試以上,看看是否有效。

嘗試像

CXXFLAGS=-Wall 
CoalitionManipulation‬‬ : ‫‪CoalitionManipulation‬‬‬‬.o PrintQ3.o ChooseRandomBit.o 
    g++ -Wall -lm $^ -o [email protected] 

CoalitionManipulation‬‬.o : CoalitionManipulation‬‬.cpp ChooseRandomBit.h PrintQ3.h 
PrintQ3.o : PrintQ3.h PrintQ3.cpp 
ChooseRandomBit.o : ChooseRandomBit.cpp ChooseRandomBit.h 

clean: 
    rm *.o CoalitionManipulation 

特殊變量$ ^擴展爲先決條件的列表中,$ @擴展爲目標名稱。

更進一步,自動生成文件生成器實際上也會爲您提供do linking,如果您只是提供關於使用LDLIBS的庫的提示信息。其次,make會假設最終鏈接步驟和中間步驟的.cpp文件。

CXXFLAGS=-Wall 
LDLIBS=-lm 
CoalitionManipulation‬‬: PrintQ3.o ChooseRandomBit.o 
CoalitionManipulation‬‬.o: ChooseRandomBit.h PrintQ3.h 
PrintQ3.o: PrintQ3.h 
ChooseRandomBit.o: ChooseRandomBit.h