Проблема в том, что когда make оценивает, как сделать цели и каковы предварительные условия, ваш TARGET
не определен, и поэтому правило гласит: wat
нуждается в .c
. Вы можете попробовать рекурсию и сказать что-то вроде этого:
struct:
$(MAKE) TARGET=struct wat
На самом деле это не так уж и хорошо, потому что ничто на самом деле не генерирует файл wat
, поэтому цель всегда устарела, а Makefile
на самом деле это всего лишь несколько прославленный сценарий оболочки.
Возможно, вам следует подумать о написании правила шаблона для сборки .wat
из .c
, что-то вроде (на вашем примере):
%.wat: %.c
$(CC) $(CFLAGS) -o $(*F).wasm $< \
&& wasm2wat $(*F).wasm > $@.wat \
&& rm $(*F).wasm
Затем вы можете позвонить make struct.wat
, и если вы все еще хотите (для удобства) иметь только цель struct
, вы можете добавить:
.PHONY: struct
struct: struct.wat