Как правильно настроить кроссплатформенный проект Delphi XE2? - PullRequest
9 голосов
/ 28 декабря 2011

Сейчас у меня 2 платформы (Mac и Win32) и 2 конфига (Debug и Release). Все это под SVN.

Вот макет для вывода сборки:

.\App\$(Platform)\$(Config)

Код разбит на несколько папок и расположен здесь:

.\Code\MyProject.dpr
.\Code\Common\
.\Code\Forms\
.\Code\Source\

Общие файлы данных здесь:

.\Data\ custom data files (dlls, textures, models, etc.)

Хотя у этой схемы есть определенные недостатки, которые мне нужно устранить, но я не знаю, как сделать это лучше. Я хочу иметь только один набор файлов данных в SVN в папке Data, но мне нужно, чтобы он автоматически копировался в пути .\App\$(Platform)\$(Config) при сборке (обратите внимание, что некоторые файлы данных являются общими для обеих платформ, но некоторые нет). Есть ли способ настроить процесс сборки для копирования файлов, как это происходит с Deployment и PAServer? В качестве альтернативы я мог бы установить пути к файлам данных как ..\..\Data, но мне это кажется странным.

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

Ответы [ 2 ]

7 голосов
/ 05 января 2012

Используйте действия Post Build.

Из параметров проекта | Build Events | События после постройки | Команды

How to setup

Дальнейшее чтение на

  1. Создание событий сборки

  2. Автоматизация до и после сборки в Delphi

0 голосов
/ 29 апреля 2015

Хорошо, это старый пост, но это то, что я делаю в Delphi (и аналогично в Visual Studio), чтобы обойти эту проблему, заключающуюся в том, что разные исполняемые файлы вывода платформы / конфигурации в разных папках, но общий набор данных,У меня есть функция для удаления частей «вложенных» папок, тогда мое приложение всегда может получить доступ к общим данным в корне этих папок (в вашем случае. \ App).Конечно, вы можете добавить дополнительные платформы и конфиги к функции ProjectPath по мере необходимости:

uses System.StrUtils;
...
function ProjectPath : string;
// Removes sub-folders created by the Delphi IDE, so the executable can refer to the source folder,
// rather than to where the executable is.
// Excludes trailiong path delimiter
begin
  Result := ExtractFilePath (Application.ExeName);
  Result := System.StrUtils.ReplaceText (Result, '\Win32'  , '');    // ReplaceText is case insensitive
  Result := System.StrUtils.ReplaceText (Result, '\Win64'  , '');
  Result := System.StrUtils.ReplaceText (Result, '\Debug'  , '');
  Result := System.StrUtils.ReplaceText (Result, '\Release', '');
  Result := ExcludeTrailingPathDelimiter (Result);
end;
...
ConnectionString := 'Database=' + ProjectPath +'\DATAFILE.DAT;etc.';
...