Я изучаю некоторые курсы по компиляции кода C в конкретную сборку.Я решил, что сгенерированная сборка должна быть проверена вручную, поэтому я выбрал less something.s
в качестве правила "test".
Как фанат, но новичок в Make, я написал этот Makefile:
CODES := a
LESS ?= less
CODES_TEST := $(patsubst %,%-test,${CODES})
.PHONY: all test ${CODES_TEST} clean
all: $(patsubst %,%.s,${CODES})
test: all
%-test: %.s
${LESS} $^
%.s: %.c
${CC} ${CFLAGS} -S -o $@ $^
clean:
rm -f *.o *.s
И у меня есть этот минимальный a.c
файл:
int asdfg(void) { return 54321; }
Затем я набрал make a-test
в Bash, ожидая, что less
появится с содержимым a.s
, только дляскажи так:
make: Nothing to be done for 'a-test'.
Я получил вышеуказанный ответ независимо от наличия a.s
, который генерируется нормально, если я выполняю make a.s
или просто make
(неявно запускает первое правило, all
).
Я проверил свой Makefile и не думаю, что допустил опечатку или другую простую ошибку.
- Что я пропустил с вышеприведенным
Makefile
? - Как заставить Make выполнить
less a.s
при запуске make a-test
?