我有这个Makefile,每行单独运行OK,但当我make
时,我收到此错误:
make: *** No rule to make target `CoalitionManipulation.cpp', needed by `CoalitionManipulation.o'. Stop.
但我可以看到CoalitionManipulation.o
文件,这意味着它存在!
Bere是makefile:
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
有什么问题?
答案 0 :(得分:3)
如果您正在使用gmake(可能),您可以将CXXFLAGS定义为-Wall,并跳过大多数.o规则(Make知道如何处理.cpp文件)。实际上,您可以将规则留空,但仍然可以毫无问题地指定标头依赖关系。
编辑:这是一个与最初的错误完全不同的错误...尝试以上内容,看看是否有效。
尝试类似
的内容CXXFLAGS=-Wall
CoalitionManipulation : CoalitionManipulation.o PrintQ3.o ChooseRandomBit.o
g++ -Wall -lm $^ -o $@
CoalitionManipulation.o : CoalitionManipulation.cpp ChooseRandomBit.h PrintQ3.h
PrintQ3.o : PrintQ3.h PrintQ3.cpp
ChooseRandomBit.o : ChooseRandomBit.cpp ChooseRandomBit.h
clean:
rm *.o CoalitionManipulation
特殊变量$ ^扩展到先决条件列表,$ @扩展为目标名称。
更进一步,如果您只是使用LDLIBS给出关于使用哪些库的提示,那么自动makefile生成器实际上也会do linking。其次,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
答案 1 :(得分:3)
make: *** No rule to make target `CoalitionManipulation.cpp', needed by `CoalitionManipulation.o'. Stop.
Make找不到CoalitionManipulation.cpp
。它是你告诉它的地方吗?