Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi 如何将32位和64位DCU编译到单独的目录中?_Delphi_32bit 64bit_Delphi Xe2 - Fatal编程技术网

Delphi 如何将32位和64位DCU编译到单独的目录中?

Delphi 如何将32位和64位DCU编译到单独的目录中?,delphi,32bit-64bit,delphi-xe2,Delphi,32bit 64bit,Delphi Xe2,我试图维护一个存储库,我的代码库中的大部分内容都是源代码,但我们有一个QuickPDF库,它是一组预编译的DCU。我想以某种方式将它们置于版本控制中,但我不想为win64设置另一个选项,在我将剩余的万亿LOC代码库转换为win64之前,我会忘记这个选项 我所想的只是拥有(quickPDF只是一个例子,这个库除了不幸的预编译之外没有什么特别之处) ctrls\quickpdf\quickpdf.pas ctrls\quickpdf\win32[*.dcu] ctrls\quickpdf\win6

我试图维护一个存储库,我的代码库中的大部分内容都是源代码,但我们有一个QuickPDF库,它是一组预编译的DCU。我想以某种方式将它们置于版本控制中,但我不想为win64设置另一个选项,在我将剩余的万亿LOC代码库转换为win64之前,我会忘记这个选项

我所想的只是拥有(quickPDF只是一个例子,这个库除了不幸的预编译之外没有什么特别之处)

  • ctrls\quickpdf\quickpdf.pas
  • ctrls\quickpdf\win32[*.dcu]
  • ctrls\quickpdf\win64[*.dcu]
从程序文件中文件夹的外观来看,Embarcadero对VCL做了类似的操作。甚至还有一些预编译的东西,比如VCL.Imaging.JPEG.pas


我怎么做同样的事情?我是否需要指定win32和win32 64文件夹,或者我是否可以在某个地方使用一些魔法?

您所说的魔法可以在普通XE2 VCL表单应用程序的.dproj文件中看到。关键因素包括以下变量:

  • $(平台)
    在Windows上可以是Win32或Win64
  • $(Config)
    这通常是调试或发布
然后在.dproj文件中,以下XML发挥了神奇的作用:

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

.\$(平台)\$(配置)
.\$(平台)\$(配置)
您可以将这些技巧用于
$(平台)
$(配置)
变量以及任何项目选项。因此,您只需要使用这些变量来设置编译器查找预编译DCU所需的任何选项

据我所知,您需要设置的选项是搜索路径。尽管我承认自己对搜索路径的工作原理并不清楚,因为我个人从不依赖搜索路径,并且总是在我的项目中显式地包含所有源文件。在您的示例中,您可以将
ctrls\quickpdf\($Platform)
添加到搜索路径。

这很简单,添加:

  • ..\ctrls\quickpdf\$(平台)
到您的项目搜索路径

尽管当您发现它确实有效时会感到惊讶,因为它在IDE中显示为灰色


不知道你在问什么?是否希望宏能够展开,以便库路径自动重定向到_32或_64后缀?因为我认为您刚刚分别设置了32位库路径和64位库路径,对吗?您已经完成了。@Warren P,谢谢,不知怎么的,这个评论让我思考了一下,我实际上在工具->选项下查看了VCL的库路径。现在得到了答案。我想指出的是,即使它在IDE中显示为灰色,它仍然可以工作(当点击“删除无效路径”时有点烦人)。@Peter它是灰色的,因为你需要选择基本配置(普通项目中的所有配置)才能编辑它。是的,我在基本配置中有它。查看我下面的帖子-我刚刚添加了一张图片。哦,我明白你在说什么了,问题是a.)这些是预编译的DCU文件(我没有它们的源代码,对此我很不高兴,但是,哦,好吧)和B.)你真的把单元输出目录放在版本控制中了吗?我们还没有在项目中使用SVN(VSS抵制者),我只是将DCU文件夹更改为相对路径,所以直到最近我才考虑过这个问题。@david:是的,应该这样做。我同意输出目录(和exe目录)应该受源代码控制。我们有它们的相对路径,53+套件中的每个项目都有自己的dcu文件夹。这样,一个项目的编译器/条件定义就不会弄乱另一个项目的dcu。允许32/64“拆分”是一件轻而易举的事(我们只需向存储库中添加许多“EnsureFolder.txt”文件,以确保所有这些dcu文件夹都存在于构建服务器中。注意:通常“单元输出目录”(如David Heffernan的回答所示)被视为搜索路径的一部分(默认情况下).与此解决方案不同,您不会遇到路径灰显的恼人问题。