Подтвердить что ты не робот

Переменная 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

Мой вопрос: возможно ли выполнять разложения на переменные, например, с шаблоном (%:%)?

4b9b3361

Ответ 1

Попробуйте следующее:

  OBJECTS = abc def ghi

  all: $(OBJECTS)

  $(OBJECTS):%:%.c
          @echo target is [email protected], source is $<

Проблема была

  • Цель по умолчанию (именно то, что Make выбирает, если вы просто наберете `make`), является первой целью в make файле, которая была` abc`.
  • Вы сделали все источники предпосылок для каждого объекта. То есть все три источника были предпосылками `abc`. Они также были предпосылками `def` и` ghi`.