#build #makefile
#сборка #makefile
Вопрос:
Типичными целями сборки для make и других систем сборки являются файл или каталог. Я создаю систему, аналогичную BSD-портам для пакетов emacs.
Я только что понял, что моя цель для каждого пакета была не совсем точной — дело не в том, что файл edan.el должен быть новее, чем его предварительные условия. Оно должно быть новее предварительных условий и должно содержать
(provide '[% pkg %])
Где pkg
— это пакет, который только что был загружен, распакован и скомпилирован в байтах.
Есть ли способ сделать это с помощью make? Обрабатывает ли какую-либо другую систему сборки подобные вещи?
Комментарии:
1. Что, кроме системы сборки, будет изменяться
edan/el
? И что вы хотите, чтобы система сборки делала, если она перестраиваетсяedan.el
и она по-прежнему не содержит этой строки?2. Ничто не изменит системы сборки, кроме Makefile в создаваемом пакете. Если он не содержит этой строки, то он пройдет через процесс сборки, но вы только что подали мне идею. Вместо изменения edan.el, являющегося проверкой, я могу добавить файл в каталог edan после завершения сборки и проверить его существование.
3. Подумайте об этом: если ничто другое не может быть изменено
edan.el
, и если процесс сборки уверен, что изменение будетedan.el
корректным, тоedan.el
это будет правильно тогда и только тогда, когда оно новее, чем его предварительные условия. Вам не нужно проверять его содержимое или вводить фиктивный файл.
Ответ №1:
Всегда бывает так, что вы хотите, чтобы цель содержала правильные данные. Вы не хотите, foo.o
например, не иметь никакого отношения к содержимому foo.c
. Временные метки являются просто прокси для этого. Вы должны верить, что инструменты действительно делают все правильно.
Похоже, настоящая сложность здесь в том, что зависимости являются динамическими. Файл edan.el
зависит от списка всех установленных в данный момент и управляемых пакетов, который может изменяться. Но вы, конечно, можете представить эти данные в виде файла. Я полагаю, что у вас уже есть файл, содержащий список активных пакетов, на самом деле.
(Возможно, вы также хотите зависеть от реальных пакетов. Вы должны быть в состоянии написать скрипт для переноса этих данных в зависимый файл, который включен в основной Makefile
.)