GNU делает взаимозависимые предварительные зависимости

Я пытаюсь написать правило make с предварительными зависимостями, которые взаимосвязаны.

a: b $(FILES)

b: $(FILE_1)
  $(eval FILES := some_function_using_file($(FILE_1)))

$(FILES):
  do something ...

По сути, мне нужно $(FILE_1), чтобы получить $(FILES). Когда make сначала читает файл, это правило ниже не существует, потому что $(FILES) изначально не определено, но оценивается динамически.

$(FILES):
  do something ...

Есть ли способ заставить это работать? Я хочу динамически создать $(FILES), а затем запустить его правило.


person Wilderness    schedule 10.10.2014    source источник


Ответы (1)


Цели оцениваются до запуска любой из них. Лучше всего создать список до того, как это произойдет.

FILES = $(shell ls) new.txt

all: $(FILES)

$(FILES):
  echo $@

Если вы действительно в отчаянии, вы можете сгенерировать другой make-файл внутри make-файла и вызвать другую копию make.

person toster-cx    schedule 11.10.2014
comment
Или include, который сгенерировал make-файл. - person reinierpost; 13.10.2014
comment
Включение будет работать перед созданием каких-либо целей, но я не думаю, что вы можете сделать это внутри цели, как в примере с OP. - person toster-cx; 13.10.2014