Что является причиной ошибки `make: Ничего нельзя сделать для 'xo'. Для некоторых x?
Я добавил новую цель (main.o
) к существующему проекту:
DATS_FILES = main.dats
HFILES = config.h es.h gc.h input.h prim.h print.h sigmsgs.h \
stdenv.h syntax.h term.h var.h
CFILES = access.c closure.c conv.c dict.c eval.c except.c fd.c gc.c glob.c \
glom.c input.c heredoc.c list.c c_main.c match.c open.c opt.c \
prim-ctl.c prim-etc.c prim-io.c prim-sys.c prim.c print.c proc.c \
sigmsgs.c signal.c split.c status.c str.c syntax.c term.c token.c \
tree.c util.c var.c vec.c version.c y.tab.c dump.c
src :
@echo ${OTHER} ${CFILES} ${HFILES} ${DATS_FILES}
list.o : list.c es.h config.h stdenv.h gc.h
main.o : main.dats
match.o : match.c es.h config.h stdenv.h
Как видно выше, я попытался дать новый источник .dats
подать тот же статус, что и .c
файлы в проекте, которые не имеют проблем со сборкой.
Если я пытаюсь построить цель напрямую, я получаю:
make main.o
make: Nothing to be done for 'main.o'.
Это происходит, даже если я бегу touch main.dats
, Если я скомпилирую main.dats
вручную после make
не удается, затем запустить make
проект завершает сборку, и выходной исполняемый файл запускается без проблем. Вот полный Makefile.in.
1 ответ
Вам нужно добавить правило для указания make
как воссоздать main.o
начиная с main.dats
, Для файлов C make знает, что делать, но для .dats
файлы это не так. В частности, вы должны изменить:
main.o : main.dats
с
main.o : main.dats
(your-compiler) (your-compiler-options) -o main.o main.dats
(при условии, что это синтаксис в вашем компиляторе для указания входных и выходных файлов)
ВАЖНО: отступ второй (и последующих) строк должен выполняться с помощью табуляций, а не пробелов, потому что так работает make.
В вашем случае (при условии .dats
это расширение для динамического языка ATS) Я думаю, что это должно быть
main.o : main.dats
patscc -c -o main.o main.dats
редактировать: если у вас есть более одного .dats
файл для компиляции вы можете добавить общее правило, которое учит make
вызвать правильный компилятор для них (спасибо Тоби за синтаксис)
%.o : %.dats
patscc -c -o $@ $<
Я не уверен, что является приоритетом для приложения, когда оба main.c
а также main.dats
присутствуют (вероятно, правило, указанное вручную, имеет приоритет)