Переменная target в make файле
Я пытаюсь скомпилировать набор целей. Однако, похоже, это только первый. Ниже приведена сводка моего файла makefile, который показывает ошибку.
OBJECTS = abc def ghi
SOURCES = abc.c def.c ghi.c
$(OBJECTS): $(SOURCES)
@echo target is [email protected], source is $<
В оболочке
$ touch abc.c def.c ghi.c
$ make
Когда я запустил make, я получаю следующий вывод:
target is abc, source is abc.c
Так кажется, что только первая цель запускается.
Если я заменил $< с $^, выход:
target is abc, source is abc.c def.c ghi.c
Мой вопрос: возможно ли выполнять разложения на переменные, например, с шаблоном (%:%)?
Ответы
Ответ 1
Попробуйте следующее:
OBJECTS = abc def ghi
all: $(OBJECTS)
$(OBJECTS):%:%.c
@echo target is [email protected], source is $<
Проблема была
- Цель по умолчанию (именно то, что Make выбирает, если вы просто наберете `make`), является первой целью в make файле, которая была` abc`.
- Вы сделали все источники предпосылок для каждого объекта. То есть все три источника были предпосылками `abc`. Они также были предпосылками `def` и` ghi`.