Makefile: как выяснить зависимости больше не используются в других правилах - PullRequest
1 голос
/ 25 августа 2011

У меня есть несколько сложный Makefile, который запускает Perl-скрипты и другие инструменты и генерирует около 1000 файлов. Я хотел бы редактировать / изменять некоторые из этих сгенерированных файлов после генерации всех файлов. Поэтому я подумал, что могу просто добавить новое правило, чтобы сделать так:

(phony new rule): $LIST_OF_FILES_TO_EDIT
    file_modifier ...

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

Если бы в Makefile можно было упомянуть, что это правило должно выполняться только как последнее правило, тогда моя проблема будет решена. но, насколько я знаю, это невозможно. Так у кого есть идея?

Некоторые баллы:

  • Список файлов для редактирования ($ LIST_OF_FILES_TO_EDIT) определяется динамически (неизвестно до процесса make)

  • Я не уверен, что выбрал подходящее название для этого вопроса. :)

1 Ответ

1 голос
/ 25 августа 2011

1) Если вы собираетесь изменить файлы таким образом, возможно, вам следует дать целевым именам разные имена, например foo_unmodified и foo_modified, чтобы обработка зависимостей в Make позаботилась об этом.

2) Если ваше фальшивое новое правило является тем, которое вы вызываете в командной строке («make phonyNewRule»), то Make выполнит сборку того, что собирается построить, перед выполнением команды file_modifier.Если вы хотите построить цели, не входящие в этот список, вы можете сделать это следующим образом:

(phony new rule): $(LIST_OF_FILES_TO_EDIT) $(OTHER_TARGETS)
    file_modifier ...

3) Если ваши зависимости установлены правильно, вы можете узнать, какие цели зависят от $ (LIST_OF_FILES_TO_EDIT),но это не очень аккуратно.Вы можете просто touch один из файлов, запустить make, посмотреть, какие цели он построил, повторить для всех файлов.Вы можете сэкономить немного времени, используя аргументы Make: "make -n -W foo1 -W foo2 -W foo3 ... -W foo99 all".Это напечатает команды Make будет запущен - я не знаю, как заставить его сообщить, какие цели он будет перестроен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...