如何使用由Embarcadero Makefile调用的MSBuild编译Delphi项目组

4

我正在尝试编译Virtual Treeview中的两个组件(VirtualTreesR.bpl和VirtualTreesD.bpl),它们被合并到了一个名为VirtualTrees.groupproj的Delphi项目组中。它们应该使用MSBuild进行编译,但这个调用是从一个(Embarcadero)Makefile中完成的。Makefile中相关的部分如下:

msbuild.exe /nologo /v:m /t:build /p:Config=Release "$(VTVDIR)\Packages\Delphi 2010\VirtualTrees.groupproj"

很遗憾,这导致了MSB4040的错误,因为环境变量BDS没有在cmd.exe中设置,但在Makefile中设置。我尝试在调用msbuild之前设置SET BDS=$(BDS),但无济于事。我还尝试将BDS设置为属性(/p:BDS=($BDS);Config=Release),但引发了另一个错误(类似于:无法在%BDS%\bin\dcc32.exe找到编译器)。
从Makefile中调用此函数是准备在CI服务器上构建我们的产品的一部分,我无法保证BDS变量在那里设置。那么,我该如何向msbuild提供在Makefile中拥有的BDS变量使其接受它?
1个回答

9

在我的批处理文件中,我使用rsvars.bat:

call "C:\Program Files (x86)\CodeGear\RAD Studio\5.0\bin\rsvars.bat"
MSBuild SomeProject.dproj ...

(显然,您需要调整路径。)

谢谢。我的问题是:我有一个Makefile,而不是批处理文件。- andy - andy
在调用make之前,难道不能先调用rsvars.bat吗? - Uli Gerhardt
我尝试了几种方法:如果我将它放在一个小批处理中,先调用rsvars,然后使用make调用Makefile,它不起作用。如果我在Makefile中在调用Msbuild.exe之前调用rsvars,它也不起作用。如果我在命令行上先调用rsvars,然后再调用msbuild,它就可以工作。长话短说:手动操作是有效的,但从Makefile中无效。 - andy
1
@andy:直接执行批处理文件调用MSBuild(而不是通过make)是否有效?您能否在构建过程中调用此类批处理文件代替make? - Uli Gerhardt
1
是的,那个可行。我会看看是否可以使用批处理来完成某些任务,而不是使用make。非常感谢! - andy
3
通常情况下,Delphi开发人员不需要使用MAKE,因为MSBuild可以完成所有必要的工作。 - Nick Hodges

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接