我的makefile有问题

时间:2010-09-02 15:07:36

标签: c++ makefile

我有这个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

有什么问题?

2 个答案:

答案 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。它是你告诉它的地方吗?