Makefile,不知道如何制作目标

时间:2014-04-04 06:37:21

标签: c++ c makefile solaris

我尝试运行以下Makefile

SRC=../src
INC=../inc

OBJS=$(SRC)/rrbsSimulator.o \
     $(SRC)/XMLParser.o

ALLOBJS=rrbsSimulator.o \
        XMLParser.o

CC=/usr/sfw/bin/gcc

FLAGS= -Wall -g -m64

AINC=-I$(INC)
ALLLIBS=-lcc -lsocket -lnsl -lpthread -lstdc++

%.o: %.cpp
   $(CC) $(AINC) $(FLAGS) -c $<

lcc: $(ALLOBJS)
   $(CC)  $(FLAGS) $(ALLLIBS) $(ALLOBJS) -o lycaUSSDSIM
   mv lycaUSSDSIM ../bin


clean:
   rm -f $(ALLOBJS)  ../bin/lycaUSSDSIM

我收到以下错误

make: Fatal error: Don't know how to make target `rrbsSimulator.o'

我做错了什么?

4 个答案:

答案 0 :(得分:2)

错误Don't know how to make target rrbsSimulator.o'“表示两件事之一。任

  1. 没有可以制作此文件的规则,或
  2. 有一条规则,但无法制作(或找到)它的依赖关系。
  3. 这看起来像一个有效的规则。

    %.o: %.cpp
       $(CC) $(AINC) $(FLAGS) -c $<
    

    因此,最可能的原因是缺少其后缀为cpp的依赖项。在相关的源文件夹中查找rrbsSimulator.cpp

    不幸的是,make的某些旧版本使用的makefile对于格式如空格和制表符非常挑剔,并且不可能以这种格式看到它们。如果您使用其中一个make,则需要仔细检查空白区域。

答案 1 :(得分:1)

您的源文件位于何处?

查看SRCOBJS变量,我可以想象您的源代码文件放在../src文件夹中。但%.o : %.cpp将在当前目录中搜索* .o和* .cpp文件。因此它既不会找到rrbsSimulator.o也不会找到rrbsSimulator.cpp。

是的,为什么不使用标准的CFLAGS变量代替你的FLAGS? 你最好这样写:

FLAGS += -Wall -g -m64

如果您想稍后从命令行添加一些额外的标志怎么办?这将允许您以这种方式调用makefile:

make FLAGS=-s

答案 2 :(得分:1)

添加VPATH = $(SRC)它将起作用。当我们实现Makefile时,还需要集中间距。

答案 3 :(得分:0)

rrbsSimulator.cpp不存在。