我无法弄清楚这个makefile有什么问题?

时间:2011-12-22 13:26:10

标签: c makefile gnu-make

我正在尝试编译一个名为lil-gp的遗传编程C库。

我不知道这类问题是否合适,但我正在寻求认真帮助。

makefile位于目录lilgp1.1/1.1/kernel下,并命名为GNUmakefile.kernel。它看起来像这样:

kobjects = main.o gp.o eval.o tree.o change.o crossovr.o reproduc.o \
    mutate.o select.o tournmnt.o bstworst.o fitness.o genspace.o \
    exch.o populate.o ephem.o ckpoint.o event.o pretty.o individ.o \
    params.o random.o memory.o output.o

kheaders = event.h defines.h types.h protos.h protoapp.h

.PHONY : all clean

LIBS += -lm
CFLAGS += -I. -I$(KERNELDIR) 

all : $(TARGET)

lilgp.h = $(addprefix $(KERNELDIR)/,$(kheaders)) $(uheaders)

$(kobjects) : %.o : $(KERNELDIR)/%.c
    $(CC) -c $(CFLAGS) $< -o $@

$(uobjects) : %.o : %.c
    $(CC) -c $(CFLAGS) $< -o $@

$(kobjects) $(uobjects) : $(lilgp.h)

$(TARGET) : $(kobjects) $(uobjects)
    $(CC) $(LFLAGS) -o $@ $^ $(LIBS) 

clean :
    \rm -f $(kobjects) $(uobjects) core

作为第一步,我遵循了以下步骤:

  1. 我将其重命名为Makefile
  2. 第二次我将all : $(TARGET)移到clean: ...
  3. 上方

    但GNU让我抱怨:

    make: *** No rule to make target `/main.c', needed by `main.o'.  Stop.
    

3 个答案:

答案 0 :(得分:3)

从错误消息中可以清楚地看出$(KERNELDIR)为空。我会在整个项目树中找到单词KERNELDIR并从那里取出来......

答案 1 :(得分:1)

以下行尝试访问kobjectsmain.c的第一个文件,但由于KERNELDIR可能未设置,因此不成功。

$(kobjects) : %.o : $(KERNELDIR)/%.c

通过快速扫描,其他一切似乎都很好。

尝试修改Makefile时要小心,以确保不会遇到像missing-separator-errors

这样的问题

答案 2 :(得分:1)

简单回答:阅读包中包含的文档(特别是第3章和第6章)。

更长的答案:如果您已经阅读了文档,您就会知道您不应该直接使用GNUmakefile.kernel。您需要选择包中的一个示例应用程序并在其目录中运行make。每个应用目录都包含一个(短)GNUmakefile,其中包含GNUmakefile.kernel 或者,您可以通过提供自己的顶级Makefile来实现自己的问题。