Я новичок в GNU make . Я хотел бы скомпилировать все мои исходные файлы сборки в отдельные объектные файлы с одинаковыми именами. В будущем, если я добавлю больше исходных файлов сборки, Makefile все равно будет работать без изменений.
например, я нахожусь в root каталоге
$ ls
Makefile obj src
$ ls src
file1.s file2.s
После make
Я хочу
$ ls obj
file1.o file2.o
В будущем, если я добавлю file3.s
в свой src
каталог, после make
я хотел бы новый file3.o
в моем obj
каталоге.
Я читал о stati c правилах шаблонов в руководстве GNU make, и я думаю, что это то, что мне нужно. Я написал следующий Makefile:
path = /path/to/toolchain/bin
AS = $(path)/llvm-mc
ASFLAGS = -filetype=obj
srcdir = src
sources = $(srcdir)/*.s
objdir = obj
objects = $(objdir)/*.o
.PHONY: all
all: $(objects)
$(objects): $(objdir)/%.o: $(srcdir)/%.s
$(AS) $(ASFLAGS) $< -o $@
.PHONY: clean
clean:
rm $(objects)
После запуска make
в оболочке я получил сообщение об ошибке:
make: *** No rule to make target `src/*.s', needed by `obj/*.o'. Stop.
Кто-нибудь может сказать мне, какую ошибку я сделал? Я проверил, что использовал табуляцию перед рецептом. Заранее спасибо.