Ответ 1
Вы можете добавить цель, которая генерирует копию фактического файла makefile с изменениями, которые вызывают зависимость svn, запускают make с ним и затем удаляют его.
У меня есть Makefile с парой правил вроде:
file.c: filesvn
filesvn: .svn/entries
action1
action2
В репозитории svn это, конечно, отлично работает. Файл зависит от жизни в репозитории подрывной деятельности. При экспорте из репозитория это не работает (нет правила для создания цели...), и я хотел бы это исправить. Я попытался просто привести ранее сгенерированную версию filesvn
в экспортированный каталог, но Make Still настаивает на проверке зависимости filesvn
.
Простое удаление зависимостей .svn/entries действительно работает, но тогда дух правила нарушен, так как просмотр обновления для обновления является целью.
Есть ли способ заставить Make не заботиться о том, что файл .svn/entries отсутствует?
Достоинства такой техники на самом деле не являются частью вопроса. Я не могу принципиально изменить это, но если есть изменение, которое поддерживает дух, который может работать. Разумеется, ответ "Ты не можешь" абсолютно прав.:)
Вы можете добавить цель, которая генерирует копию фактического файла makefile с изменениями, которые вызывают зависимость svn, запускают make с ним и затем удаляют его.
Вы можете использовать функцию wildcard
, чтобы игнорировать файл, если он не существует:
filesvn: $(wildcard .svn/entries)
Кроме того, Subversion 1.7 изменяет формат локальной рабочей копии, поэтому это правило перестанет работать даже в рабочих копиях.
Шаблоны %
правила
Для правил шаблона вам нужно .SECONDEXPANSION
:
.SECONDEXPANSION:
%.a: %.b $$(wildcard $$*.c)
cc $< -o [email protected]
См. также: Как я могу настроить зависимость шаблона шаблона в файле Makefile?
Протестировано в файле 4.1.