Delphi условная компиляция - PullRequest
1 голос
/ 23 июня 2010

Мне нужно знать, есть ли возможность компилировать проект delphi, только если исходный код или какой-либо использованный модуль, пакет и т. Д. Были изменены.

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

Спасибо.

Редактировать: используется для хеширования WebUpdate.

Ответы [ 3 ]

2 голосов
/ 23 июня 2010

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

0 голосов
/ 23 июня 2010

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

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

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

0 голосов
/ 23 июня 2010

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

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

...