Предварительные требования к символическим ссылкам в Makefile без check-symlink-times - PullRequest
1 голос
/ 02 декабря 2010

Мой проект использует статическую библиотеку от внешнего поставщика, libext.a.Библиотека хранится в центральном месте, совместно используемой всеми разработчиками проекта, central/, и с каждым обновленным выпуском библиотеки добавляется новый файл с суффиксом текущей версии: central/libext.a.1, central/libext.a.2, central/libext.a.3, ...

Репозиторий проекта Subversion содержит символическую ссылку libext.a, которая указывает на последнюю версию библиотеки в central.Всякий раз, когда добавляется новая версия, ссылка изменяется и фиксируется в хранилище.

Проблема заключается в том, что при перекомпиляции проекта после изменения ссылки и обновления рабочей копии make смотрит на время измененияцели ссылки, а не во время модификации самой ссылки (libext.a).Таким образом, библиотека, используемая в скомпилированном проекте, все еще является старой версией.

Мне известно о флаге -L / --check-symlink-times, доступном в GNU Make начиная с версии 3.81, котораяmake смотрит на время модификации как цели ссылки, так и самой ссылки, но мой проект использует версию 3.80, и обновление будет очень трудным, поскольку компиляция должна поддерживаться на многих разных машинах, некоторые из которых у меня нетcontrol.

Какой самый простой способ эмулировать поведение этого нового флага в моей старой версии make?Я предпочитаю что-то, что может быть локальным для определенного Makefile и реализовано в нем, а не сценарий, который нужно запустить перед запуском make, или параметр командной строки, который должен быть указан с ним, хотя это не является абсолютно неприемлемым.

Ответы [ 2 ]

1 голос
/ 02 декабря 2010

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

0 голосов
/ 07 декабря 2010

Лучшее решение, которое я до сих пор придумал, - это добавить libext.a.timestamp в качестве требования в Makefile, для которого требуется libext.a, и добавить его в качестве предварительного условия к правилу, в котором libext.a является обязательным условием.

Кроме того, я добавил правило:

%.timestamp
  touch $@

Теперь мне нужно найти способ прикоснуться к отметке времени при каждом обновлении ссылки.К сожалению, я пока не нашел способа сделать это (в SVN нет пост-обновленного хука) ...

...