使用MSBuild编译 Delphi 项目时DCC的命令行太长

mm9b1k5b  于 2023-06-22  发布在  其他
关注(0)|答案(3)|浏览(217)

我们使用MSBuild来构建 Delphi 项目。有时DCC 32命令行太长(> 32 K字符)而失败。这是由我们的搜索路径引起的。我们已经使用相对路径、组合源等方法缩短了这条路径。这在过去是固定的。
现在我们再次遇到这个问题,我正在寻找一个最终的解决方案。重构代码库是我想避免的事情,因为我们使用了很多第三方组件,我不想混合(并保持在单独的目录)。
我读过关于MSBuild的response files,但我不知道如何让它在DCC 32上工作。我总是提到,同一个搜索路径会多次传递给DCC 32,并带有不同的标志(-U、-I、-R、-U)。-R(用于资源编译器)不必使用完全相同的搜索路径,但不幸的是,它总是从编译器继承搜索路径,我没有看到忽略它的选项。
谁知道如何解决这个问题,并找到一个解决方案,以防止这些问题在未来?

uqcuzwp8

uqcuzwp81#

事实证明,Embarcadero已经对此进行了修复,但从未将其记录在案(我不确定哪个 Delphi 版本支持此功能)。当您在项目中启用编译器选项Use MSBuild externally to compile时,将使用该选项。这将启用MSBuild脚本CodeGear.Delphi.Targets(位于Delphi-Bin目录中)中的选项/condition**DCC_UseMSBuildExternally**。如果启用此选项,MSBuild脚本将自动生成一个响应文件<your project>.cmds,并将其传递给dcc32。Embarcadero MSBuild脚本中的注解很清楚:-)

<!--
  ========================================================================
               _GenerateCmdsFile
    Generate the .cmds file to pass to the compiler to avoid problems
    when the command line is too long and option "Use MSBuild externally
    to compile" is enabled.

  ========================================================================
  -->

长话短说吧。使用以下MSBuild命令行可防止出现这些问题:
msbuild <your project>.drpoj /p:DCC_UseMSBuildExternally=true

omqzjyyz

omqzjyyz2#

您可以将所有参数放在一个命令文件中,每一个都放在单独的一行中,然后将该文件交给编译器,并以@为前缀。

"c:\program files (x86)\embarcadero\studio\22.0\bin\dcc32.exe" @myProject.cmds myProject.dpr
ppcbkaq5

ppcbkaq53#

请尝试在IDE的项目选项页中启用“在外部使用MSBuild进行编译”选项。项目将包含DCC_UseMSBuildExternally属性。因此,您的项目将使用脚本文件来编译源代码,而不是使用长-长命令行选项。

相关问题