如何让MSBuild从DProj文件中获取DCU输出路径?

问题描述 投票:0回答:1

我有一个启动 msbuild 并编译一堆库的脚本。这是其中之一的 test 脚本:

CALL _whereIsDelphi.cmd Alex
CALL "%DelphiPath%\bin\rsvars.bat"
msbuild "c:\source\TOOLS\Lib1\Lib1.dproj" /t:Build /p:DCC_BuildAllUnits=true /p:Configuration=Release /p:platform=Win32 

PS:最后,我想将整个 .ProjGroup 文件传递给脚本,而不是仅仅一个 .dropj 文件。


但是我的输出文件夹有问题。即使 .dproj 文件是这样的:

<PropertyGroup Condition="'$(Base)'!=''">
<DCC_BplOutput>.\$(ProductVersion)\$(Platform)\$(Config)</DCC_BplOutput>
<DCC_DcpOutput>.\$(ProductVersion)\$(Platform)\$(Config)</DCC_DcpOutput>
<DCC_DcuOutput>.\$(ProductVersion)\$(Platform)\$(Config)</DCC_DcuOutput>

输出(DCU)转到:

c:\source\TOOLS\Lib1\Win32\Release 

而不是预期的:

c:\source\TOOLS\Lib1\22.0\Win32\Release

知道如何将输出(DCU)创建到正确的文件夹中吗?


请注意,尽管大多数库都使用 $(ProductVersion)$(Platform)$(Config) 格式进行输出,但其中一些库并不这样做。这就是为什么我不能使用硬编码的输出路径。我真的很想使用 $(ProductVersion),因为这样我就可以并行运行 Delphi 10、11、12 的库。


更新:

正如@Steve所建议的,我尝试使用 /p:DCC_DcuOutput="Test" 并且它有效,但是 /p:DCC_DcuOutput="$(ProductVersion)$(Platform)$(Config)" 将不起作用。它不会解析 $() 变量。它将创建完全相同的文件夹:$(ProductVersion)。

但是,即使脚本能够解析 $() 变量,此解决方案仍然无法实现我的最终目标:将 ProjGroup 文件传递给 msbuild,因为那里不再涉及脚本。我真的不想通过项目组文件和脚本进行编译,因为两者会在某一时刻失去同步!无论我们在小组中做什么改变,也都必须进入脚本。

delphi msbuild
1个回答
1
投票

我遇到了类似的问题,无论项目如何配置,我都希望生成地图文件。我发现我可以做到这一点:

MSBuild.exe myproject.dproj /t:Build /p:platform=Win64 /p:Configuration=Debug /p:DCC_MapFile=3;DCC_Hints=false;DCC_Warnings=false

我使用 /p 命令行参数专门设置了这些属性:DCC_MapFileDCC_HintsDCC_Warnings

我还没有尝试过这个,但也许你可以对 DCC_DcuOutput 做同样的事情。

© www.soinside.com 2019 - 2024. All rights reserved.