Как написать make-файл, который помечает библиотеку или исполняемый файл с идентификатором хранилища? - PullRequest
0 голосов
/ 17 декабря 2010

У меня есть код, который генерирует исполняемый файл через make-файл.Сам исполняемый файл генерирует выходной файл с данными.В будущем, когда я вернусь и посмотрю на старые данные, которые я сохранил, я хотел бы иметь возможность воспроизводить данные надежным и систематическим способом.Другими словами, мне нужно было бы знать идентификационный номер из хранилища (GIT), чтобы я мог восстановить код, и мне также нужно было бы знать, как я скомпилировал код и какой компилятор и флаги я использовал.Как лучше всего это сделать?

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

Ответы [ 2 ]

0 голосов
/ 26 января 2011

Это прямо вперед.Хитрость заключается в том, чтобы не связывать вашу библиотеку, если версия не изменена.

.PHONY: version.proto
version.proto:
    Run some commands
    Which will produce version.proto
    Containing something like 'char const Version[] = "MyProj svn rev 19228 tag (null)"

version.c: version.proto
    cmp -s $< $@ || cp $< $@

∶

Включите version.c в список источников вашего проекта, и все готово.

Что все это cmp -s $< $@ || cp $< $@?Хитрость заключается в обновлении version.c , только если оно отличается от последней версии, скомпилированной в ваш проект.OTOH, если он не отличается, то ошибка не должна возвращаться в оболочку.

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

Есть много способов сделать это; Выбор лучшего будет зависеть от таких вещей, как гибкость вашей системы управления версиями и то, насколько много неприятностей вы хотите избежать.

Одна возможность: я не знаком с GIT, но могу поспорить, что вы приложите некоторые усилия, чтобы вы могли настроить систему таким образом, чтобы при проверке версии кода и файла сборки вы также создавали небольшой файл, содержащий номер версии ( или удостоверение личности или что-то). Приложив немного больше усилий, вы могли бы записать номер версии в make-файл для защиты от потерянного / замененного файла версии (хотя это было бы концептуально негигиенично, так как в этом случае make-файл не был бы идентичен тому, который находится под контролем исходного кода). Исполняемый файл прочитает файл и добавит номер версии к данным. (Опять же, число может быть включено в исполняемый файл, если хотите, что сделает библиотеку автономной сущностью и защитит от подкачанного файла makefile / versionfile, но вызовет недовольство ваших сотрудников QA.)

Другой способ: использовать контрольные суммы. Makefile вычисляет свою собственную контрольную сумму и записывает ее в небольшой файл, который исполняемый файл использует / включает и добавляет к данным. Исполняемый файл также вычисляет свою собственную контрольную сумму (с оговорками для неопределенности компилятора) и добавляет это тоже. Небольшая база данных контрольных сумм, легко создаваемая при необходимости, служит таблицей поиска для индекса обратно в хранилище.

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