Что, если вашей целью создания (или сборки) является наличие определенного содержимого в файле

#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 .)