Ваш путь поиска слишком велик. Он должен содержать только то, что вы хотите, чтобы Delphi перекомпилировала с вашим проектом. Вы действительно не хотите перекомпилировать VCL-джедай каждый день?
Я создаю один каталог, куда идут все скомпилированные модули. Скажем, C: \ dcu . Укажите это как «каталог вывода модуля» в всех пакетах. Мой «путь поиска» тогда всегда , вот так:
$(Delphi)\Lib;C:\dcu
Компилятор находит все, что ему нужно, и никогда не находит никакого исходного кода. Единственный исходный код, который он когда-либо видит, находится в файлах, которые непосредственно принадлежат любому проекту, который я компилирую. Исходные каталоги проекта не обязательно должны находиться в пути поиска, поскольку все эти файлы уже являются прямыми участниками проекта. Компилятор точно знает, где они находятся.
Для меня все исходные файлы проекта находятся в одном каталоге. Если вам нужны отдельные каталоги для разных частей, например Core и GUI , я бы поместил их в отдельные пакеты, чтобы я мог работать с ними и компилировать их отдельно. Даже если конечная программа не использует полученные BPL, пакеты по-прежнему являются хорошим способом сегментации вашего проекта и определения зависимостей.
Когда компиляция модулей для одного проекта не компилирует модули автоматически для всех других проектов, вы вынуждены менять активные проекты. Это занимает мгновение вашего времени, но также служит напоминанием о том, что вы тоже «меняете шляпы».
Хотя вы производите только один продукт , это не значит, что у вас должен быть только один проект в Delphi. У вас должен быть хотя бы один проект для каждого исполняемого модуля (EXE, DLL, BPL) в вашем продукте. Используйте группы проектов для управления несколькими проектами в одном сеансе IDE. Ни одно подразделение не должно быть участником более чем одного проекта.
Я не понимаю вашу часть о подключаемых модулях и различных версиях вашего проекта. Когда вы говорите «плагин», я предполагаю, что вы говорите об отдельных исполняемых модулях, таких как библиотеки DLL или пакеты, которые клиент может включить или нет. Не могли бы вы превратить функции ваших различных выпусков в подключаемые модули, которые просто не включены в меньшие выпуски? Тогда вам не нужно беспокоиться об условной компиляции вашего проекта; просто есть несколько разных инсталляторов, которые захватывают разные наборы плагинов.