我们使用MSBuild来构建 Delphi 项目。有时DCC 32命令行太长(> 32 K字符)而失败。这是由我们的搜索路径引起的。我们已经使用相对路径、组合源等方法缩短了这条路径。这在过去是固定的。
现在我们再次遇到这个问题,我正在寻找一个最终的解决方案。重构代码库是我想避免的事情,因为我们使用了很多第三方组件,我不想混合(并保持在单独的目录)。
我读过关于MSBuild的response files
,但我不知道如何让它在DCC 32上工作。我总是提到,同一个搜索路径会多次传递给DCC 32,并带有不同的标志(-U、-I、-R、-U)。-R(用于资源编译器)不必使用完全相同的搜索路径,但不幸的是,它总是从编译器继承搜索路径,我没有看到忽略它的选项。
谁知道如何解决这个问题,并找到一个解决方案,以防止这些问题在未来?
3条答案
按热度按时间uqcuzwp81#
事实证明,Embarcadero已经对此进行了修复,但从未将其记录在案(我不确定哪个 Delphi 版本支持此功能)。当您在项目中启用编译器选项
Use MSBuild externally to compile
时,将使用该选项。这将启用MSBuild脚本CodeGear.Delphi.Targets
(位于Delphi-Bin目录中)中的选项/condition**DCC_UseMSBuildExternally
**。如果启用此选项,MSBuild脚本将自动生成一个响应文件<your project>.cmds
,并将其传递给dcc32
。Embarcadero MSBuild脚本中的注解很清楚:-)长话短说吧。使用以下MSBuild命令行可防止出现这些问题:
msbuild <your project>.drpoj /p:DCC_UseMSBuildExternally=true
omqzjyyz2#
您可以将所有参数放在一个命令文件中,每一个都放在单独的一行中,然后将该文件交给编译器,并以@为前缀。
ppcbkaq53#
请尝试在IDE的项目选项页中启用“在外部使用MSBuild进行编译”选项。项目将包含DCC_UseMSBuildExternally属性。因此,您的项目将使用脚本文件来编译源代码,而不是使用长-长命令行选项。