Hei*_*cht 5 delphi deployment delphi-2009
我使用以下命令从批处理文件构建包:
msbuild ..\lib\Package.dproj /target:Build /p:config=%1
Run Code Online (Sandbox Code Playgroud)
包的设置取决于选项集:
<Import Project="..\optionsets\COND_Defined.optset" Condition="'$(Base)'!='' And Exists('..\optionsets\COND_Defined.optset')"/>
Run Code Online (Sandbox Code Playgroud)
此选项集定义了我的许多包所依赖的条件符号。该文件如下所示:
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<DCC_Define>CONDITION;$(DCC_Define)</DCC_Define>
</PropertyGroup>
<ProjectExtensions>
<Borland.Personality>Delphi.Personality.12</Borland.Personality>
<Borland.ProjectType>OptionSet</Borland.ProjectType>
<BorlandProject>
<Delphi.Personality/>
</BorlandProject>
<ProjectFileVersion>12</ProjectFileVersion>
</ProjectExtensions>
</Project>
Run Code Online (Sandbox Code Playgroud)
现在我需要两种构建:一种定义了条件,另一种没有定义条件。我的攻击向量是选项集文件。我对该怎么做有一些想法:
但在开始重新发明轮子之前,我想问一下您将如何完成这项任务?也许已经有一些方法可以支持这种情况(比如某些命令行开关,我可以在 Delphi 或批处理文件魔法中配置的东西)。
我处理此问题的方法是定义多个构建配置,然后在构建时使用/p:config=XXX
. 它在 IDE 中也能很好地工作,因为您只需双击项目管理器中的构建配置即可激活它。
当我这样做时,我个人使用构建配置的继承,这样我就不必重复自己。例如,我有一个名为的构建配置,Debug DCUs
它继承自该Debug
配置,只需将Debug DCUs
选项更改为True
.
为了帮助解释我的意思,我的项目中的构建配置树如下所示:
配置Debug DCUs
通过此选项集实现:
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<DCC_DebugDCUs>true</DCC_DebugDCUs>
</PropertyGroup>
<ProjectExtensions>
<Borland.Personality>Delphi.Personality.12</Borland.Personality>
<Borland.ProjectType>OptionSet</Borland.ProjectType>
<BorlandProject>
<Delphi.Personality/>
</BorlandProject>
<ProjectFileVersion>12</ProjectFileVersion>
</ProjectExtensions>
</Project>
Run Code Online (Sandbox Code Playgroud)
现在,我确信您可以通过使用来完成此操作/p:DCC_Define=XXX
,但我认为使用构建配置更干净,这样您就可以确保在 IDE 中获得的内容与从命令行构建中获得的内容相同。
我不会推荐您的要点列表中的任何一种方法。在我看来,这些方法非常脆弱。