Не могу понять, что не так в этом make-файле?

Я пытаюсь скомпилировать библиотеку C для генетического программирования под названием lil-gp .

Я не знаю, уместно ли здесь задавать подобные вопросы, но я ищу серьезную помощь по этому поводу.

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: ...

Но GNU make жалуется на то, что:

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

person oakenshield1    schedule 22.12.2011    source источник
comment
Есть ли make-файл в каталогах над ядром - они, вероятно, будут определять KERNELDIR   -  person mmmmmm    schedule 22.12.2011
comment
Вроде ссылка на ftp сайт мертва. Я загрузил его в другое место. Пожалуйста, проверьте это. Спасибо.   -  person oakenshield1    schedule 22.12.2011


Ответы (3)


Простой ответ: прочтите документацию, включенную в пакет (особенно главы 3 и 6).

Более длинный ответ: если бы вы читали документацию, вы бы знали, что не должны использовать GNUmakefile.kernel напрямую. Вам нужно выбрать одно из примеров приложений в пакете и запустить make в его каталоге. Каждый из каталогов приложений содержит (короткий) GNUmakefile, который включает GNUmakefile.kernel.
В качестве альтернативы вы можете реализовать свою собственную проблему, предоставив свой собственный Makefile верхнего уровня.

person eriktous    schedule 22.12.2011
comment
На самом деле я читал до 3.1, а также до 3.4; жаль, что я не осознал, что фактическая часть, которую НЕОБХОДИМО прочитать, находится между ними. В любом случае, спасибо за полезные комментарии и критику. - person oakenshield1; 23.12.2011

Из сообщения об ошибке ясно, что $(KERNELDIR) пусто. Я бы поискал слово KERNELDIR по всему дереву проекта и взял его оттуда ...

person NPE    schedule 22.12.2011

Следующая строка пытается получить доступ к первому файлу в kobjects, который равен main.c, и это безуспешно, потому что KERNELDIR не может быть установлен.

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

При быстром сканировании все остальное вроде нормально.

Будьте осторожны при попытке изменить Makefile, чтобы не столкнуться с такими проблемами, как missing-separator-errors < / а>

person Sangeeth Saravanaraj    schedule 22.12.2011