Как написать «двунаправленный» make-файл, который синхронизирует два файла? - PullRequest
0 голосов
/ 26 декабря 2018

Я работаю с набором двоичных файлов, которые можно «декомпилировать» или «компилировать» из набора файлов INI.Поскольку и двоичные файлы, и файлы INI проверяются в моем хранилище, я использую небольшой сценарий для (де) компиляции всех из них.

Наш рабочий процесс обычно включает непосредственное редактирование двоичных файлов и декомпиляцию модифицированных двоичных файлов в INI.формат.Однако иногда нам нужно отредактировать файлы INI и скомпилировать изменения в двоичные файлы.

Вопрос: могу ли я создать один make-файл, который определяет, какой набор был изменен совсем недавно, и автоматически выполняет (де) команды компиляции вВ каком направлении можно синхронизировать оба набора файлов?Я предпочитаю использовать обычные (GNU?) Функции make, но если есть более специализированный инструмент, который работает, я весь слух.

(я мог бы сделать две отдельные директивы, "decompile-all" и "compile"-all ". Я хочу знать, есть ли опция для одной команды.)

1 Ответ

0 голосов
/ 26 декабря 2018

Я не понимаю, как это может работать.Предположим, это можно сделать в make;теперь у вас есть два файла foo.exe и foo.ini (вы не говорите, каковы ваши фактические шаблоны имен файлов).Вы запускаете make и видите, что foo.exe новее, чем foo.ini, поэтому он декомпилирует двоичный файл для создания нового foo.ini.Теперь вы снова запускаете make, и на этот раз он видит, что foo.ini новее, чем foo.exe, потому что вы только что создали первый, поэтому он компилирует foo.ini в foo.exe.

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

Единственный способ, которым это может сработать, - это если вы (а) проверили, проверяют ли файлыне было точно идентичного времени последнего измененного времени, и (b) имел способ сбрасывать время в скомпилированном / декомпилированном файле так, чтобы оно было идентично файлу, из которого он был создан, а не «сейчас», которое является значением по умолчанию дляКонечно.

Ответ в том, что make не может быть использован в этой ситуации.Конечно, вы могли бы написать себе небольшой сценарий оболочки, который просматривал каждый файл и проверял, были ли последние измененные времена идентичными или нет, и если не скомпилировал их, то использовал touch -m -r origin, где origin - файл, который имелболее новое время модификации, чтобы у обоих было одинаковое время модификации.

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