Пометка зависимости make-файла как необязательной или иным образом неважной - PullRequest
15 голосов
/ 18 ноября 2011

У меня есть Makefile с парой правил вроде следующего:

file.c: filesvn

filesvn: .svn/entries
     action1
     action2

В репозитории svn это, конечно, работает нормально. Файл зависит от жизни в хранилище Subversion. При экспорте из репозитория это не работает (нет правила для создания цели ...), и я хотел бы это исправить. Я попытался просто перенести ранее сгенерированную версию filesvn в экспортированный каталог, но Make по-прежнему настаивает на проверке зависимости filesvn.

Конечно, простое удаление зависимости .svn / records работает, но тогда дух правила нарушается, поскольку целью является обновление обновления.

Есть ли способ заставить Make не заботиться о том, что там нет файла .svn / records?

Достоинства такой техники на самом деле не являются частью вопроса. Я не могу принципиально изменить это, но если есть изменение, которое поддерживает дух, который мог бы работать. Ответ «Вы не можете», конечно, совершенно верен. :)

Ответы [ 3 ]

24 голосов
/ 20 ноября 2011

Вы можете использовать функцию wildcard, чтобы игнорировать файл, если он не существует:

filesvn: $(wildcard .svn/entries)

В сторону: Subversion 1.7 изменяет формат локальной рабочей копии, поэтому это правило перестанет работать даже в рабочих копиях.

2 голосов
/ 18 ноября 2011

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

1 голос

Шаблон % Правила

Для шаблонных правил вам нужно .SECONDEXPANSION:

.SECONDEXPANSION:
%.a: %.b $$(wildcard $$*.c)
    cc $< -o $@

См. Также: Как сделать зависимость правила шаблона необязательной в файле Makefile?

Проверено в Make 4.1.

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