如何正确配置跨平台 Delphi XE2 项目?

9

目前我有两个平台(Mac和Win32)和两个配置(Debug和Release)。整个项目都在SVN下管理。

这是构建输出的布局:

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

代码被分成几个文件夹,位于这里:
.\Code\MyProject.dpr
.\Code\Common\
.\Code\Forms\
.\Code\Source\

这里是常见的数据文件:

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

虽然这种方案有一些缺陷,但我需要解决它,但我不知道如何使它变得更好。我希望在Data文件夹下只有一个数据文件集合在SVN中,但我需要在构建时自动将其复制到.\App\$(Platform)\$(Config)路径下(注意,某些数据文件对两个平台都是共同的,但有些不是)。是否有办法设置构建过程来复制文件,就像Deployment和PAServer一样?或者我可以将Data文件的路径设置为..\..\Data,但我觉得那看起来很奇怪。

也许还有其他我不知道的选项,或者项目布局可以完全改变?您会如何设置跨平台编译的项目结构和构建过程?


“资源文件”具有多重含义。大多数Windows开发人员会想到资源脚本(.res)或其编译后的等效物(.rc),它们被链接器嵌入可执行文件中。据我所知,这是Windows使用的可移植可执行文件格式所特有的。既然您希望将它们复制到输出文件夹中,我可以假设这不是您所指的内容? - Kenneth Cochran
抱歉造成混淆,我指的是数据文件(dll、纹理、模型等)。我稍微编辑了一下问题。 - Kromster
1
项目的PostBuild操作不会有帮助吗? - Gad D Lord
使用一些截图和进一步阅读链接来回答。 - Gad D Lord
2个回答

7

1
做得不错,配合所建议的解决方案提供了图像和参考链接。 - Ken White

0

好的,这是一篇旧文章,但这是我在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.';

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接