加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

delphi – 如何从命令行构建时修改/替换选项集文件?

发布时间:2020-12-15 09:16:53 所属栏目:大数据 来源:网络整理
导读:我使用以下命令从批处理文件构建包: msbuild ..libPackage.dproj /target:Build /p:config=%1 包的设置取决于选项集: Import Project="..optionsetsCOND_Defined.optset" Condition="'$(Base)'!='' And Exists('..optionsetsCOND_Defined.optset')"/
我使用以下命令从批处理文件构建包:

msbuild ..libPackage.dproj /target:Build /p:config=%1

包的设置取决于选项集:

<Import Project="..optionsetsCOND_Defined.optset" Condition="'$(Base)'!='' And Exists('..optionsetsCOND_Defined.optset')"/>

此选项集定义了许多包依赖的条件符号.该文件如下所示:

<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>

现在我需要两个构建:一个定义条件,一个不定义.我的攻击向量将是选项集文件.我对如何做有一些想法:

>编写一个修改选项集文件的程序,在批量生成之前运行它
>调整项目文件并修改选项集路径以包含环境变量,然后在不同位置具有不同的选项集

但在开始重新发明轮子之前,我想问一下你将如何解决这个问题?也许已经存在意味着支持这种情况的手段(比如某些命令行开关,我可以在Delphi中配置的东西或批处理文件魔法).

解决方法

我这样做的方法是定义多个构建配置,然后在构建时使用/ p:config = XXX选择合适的构建配置.在IDE中也能很好地工作,因为你可以在项目管理器中双击构建配置来激活它.

我个人使用构建配置的继承,这样我就不必重复自己了.例如,我有一个名为Debug DCU的构建配置,它继承自Debug配置,只是将Debug DCU选项更改为True.

为了帮助解释我的意思,这是构建配置树在我的项目中的样子:

调试DCU配置通过此选项集实现:

<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>

现在,我确信您可以使用/ p:DCC_Define = XXX来完成此操作,但我认为使用构建配置更清晰,这样您就可以确定IDE获得的内容与您从IDE获得的内容相同命令行构建.

我不建议你的子弹点列表中的任何一种方法.这些方法对我来说非常脆弱.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读