Условная компиляция Delphi

Я должен знать, там ли какая-либо опция скомпилировать проект Дельфи, только если источник или любая используемая единица, пакет и т.д. был изменен.

Если это не возможная, вторая альтернатива: Есть ли любая опция генерировать точно тот же двоичный файл, компилирующий два раза тот же проект.

Спасибо.

Править: Использование для хеша, базирующегося WebUpdate.

1
задан Francis Lee 23 June 2010 в 11:25
поделиться

3 ответа

Delphi компилирует только измененные модули при компиляции и компилирует все модули независимо от статуса изменения при сборке.

Exe никогда не бывает одинаковым на двоичном уровне. Просто дважды собрал проект, переименовал exe, чтобы он имел расширение txt, и сравнил их с Beyond Compare: он показывает различия.

0
ответ дан 2 September 2019 в 23:34
поделиться

Компиляция Delphi будет компилировать только измененные модули. Но, как уже говорилось, у модуля есть данные, поэтому компилятор может проверить, какие обновления нуждаются в обновлении, а какие нет. И исполняемый файл может измениться, потому что процесс сборки может изменить исполняемый файл. Ваши веб-обновления не должны использовать хэш файла, они должны использовать информацию о версии, чтобы решить, что обновлять, а что нет. Таким образом установщики проверяют, какие файлы следует заменить.

2
ответ дан 2 September 2019 в 23:34
поделиться

Одно (трудное) решение: Создавайте свои экзы с помощью Makefile! Makefile позволяет вам сказать: "Этот exe сделан из этих файлов, используя эти команды". Make будет выполнять "эти команды", только если хотя бы один из файлов, которые вы перечислили как составляющие ваш exe, новее вашего exe.

Самое сложное в этом деле - определить список файлов, составляющих ваш exe: вы можете легко получить список файлов, перечисленных в DPR/DPROJ, но вам также потребуется определить все связанные ресурсы ($R), все включенные файлы ($INCLUDE), все файлы, которые неявно компилируются Delphi, поскольку они используются в пунктах "uses" и находятся в пути библиотеки.

Сгенерировать Makefile для общего случая очень сложно, но для одного конкретного проекта это может сработать. Например, вы можете считать, что ваш файл зависит только от файлов, перечисленных в файлах DPR, и тогда убедитесь, что вы добавили все соответствующие файлы в DPR.

0
ответ дан 2 September 2019 в 23:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: