2010-09-02 40 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