Вопрос

У меня есть файл BPG, который я изменил, чтобы использовать в качестве файла make для сервера автоматической сборки нашей компании.Чтобы заставить его работать, мне пришлось изменить

Uses                       *  Uses
  unit1 in 'unit1.pas'     *   unit1
  unit2 in 'unit2.pas'     *   unit2
   ...                     *    ...

в файле DPR, чтобы заставить его работать без того, чтобы компилятор не выдал мне какую-то болтовню о unit1.pas, который не найден.Это раздражает, потому что я хочу использовать файл BPG, чтобы фактически увидеть содержимое моего проекта, и каждый раз, когда я добавляю новый модуль, он автоматически подключает его из «unitx.pas» в мой файл DPR.

я бегу make -f [then some options], файлы DPR, которые я компилирую, находятся не в том же каталоге, что и файл make, но я не уверен, что это имеет значение.Все компилируется нормально, пока in 'unit1.pas удален.

Это было полезно?

Решение

Это может быть связано с тем, что путь поиска в IDE и путь поиска компилятора командной строки не совпадают.Если вы измените путь поиска компилятора командной строки, вы сможете использовать точно такой же исходный код, как и в IDE.

Одна из возможностей настроить путь поиска для компилятора командной строки — сделать это в файле dcc32.cfg.Посмотрите справку, в справке IDE есть краткое описание dcc32.cfg.

Другие советы

Ну, этот обходной путь сработал для меня.

//{$define PACKAGE}
{$ifdef PACKAGE}
 uses 
  unit1 in 'unit1.pas'
  unit2 in 'unit2.pas'
   ... 
{$else}
 uses 
  unit1 
  unit2
   ...
{$endif}

Единственная проблема заключается в том, что всякий раз, когда вы добавляете новый модуль, Delphi стирает ваш ifdef package на вершине.

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

program a;

uses
  ACondUnits;

...


unit ACondUnits;

interface

uses
{$IFDEF UseD7MM}
  Delphi7MM;
{$ELSE}
  FastMM4;
{$ENDIF}

implementation

end.

Возможно, этот трюк работает и в пакетах.Никогда не пытался.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top