Delphi 2007命令行编译器dcc32.cfg问题

4
我正在使用命令行编译器进行构建。一个问题是路径似乎需要是文件名的短版本,以便它们不包含任何空格。尽管我已经使用它一段时间了,但我对此并不太了解。
我最近升级到d2009,问题就从那时开始出现了。
有没有方法可以避免缩短路径?
我应该说,我目前不想改用MS Build工具。我只想构建我的应用程序的旧副本并继续其他工作。
以下是在dcc32.cfg文件中用于-I、-U、-O和-R参数的路径:
$(BDS)\LIB;$(BDS)\Imports;$(BDS)\Lib\Indy10;C:\PROGRA~1\Borland\BDS\4.0\RAVERE~1\Lib;c:\prj\lib\lib2002;C:\DOCUME~1\ALLUSE~1\DOCUME~1\RADSTU~1\5.0\Bpl;c:\DOCUME~1\mike\MYDOCU~1\BORLAN~1\bpl;C:\Prj\Lib\LOCKBO~1\source;C:\Prj\Lib\MyComp;C:\Prj\Lib\ABBREV~1\source;C:\Prj\Lib\ZLib;C:\Prj\Lib\MinMod;C:\Prj\Lib\HELPMA~1;C:\Prj\Lib\DXGETT~1;c:\windows\system32;c:\prj\lib\xpburn;C:\Prj\Lib\WININE~1;C:\Prj\Lib\regexpr\Source;C:\Prj\Lib\VCARDR~1;C:\PROGRA~1\Raize\RC4\Lib\BDS2006;C:\Prj\Lib\jcl\lib\d10;C:\Prj\Lib\jcl\source;C:\Prj\Lib\jvcl\lib\D10;C:\Prj\Lib\jvcl\common;C:\Prj\Lib\jvcl\RESOUR~1;C:\Prj\Lib\ProE6\Delphi;C:\Prj\Lib\FastMM4;C:\Prj\Lib\OPENOF~1;C:\Prj\Lib\DEVELO~1\Library\Delphi11;C:\Prj\Lib\DEVELO~1\EX38D9~1\Sources;C:\Prj\Lib\DEVELO~1\EXBD88~1\Sources;C:\Prj\Lib\DEVELO~1\XPTHEM~1\Sources;C:\Prj\Lib\DEVELO~1\EX2EBC~1\Sources;C:\Prj\Lib\DEVELO~1\EXC5FB~1\Sources;C:\Prj\Lib\DEVELO~1\EX7C7C~1\Sources;C:\Prj\Lib\DEVELO~1\EXPRES~3\Sources;C:\Prj\Lib\DEVELO~1\EXPRES~4\Sources;C:\Prj\Lib\DEVELO~1\EXC73B~1\Sources;C:\Prj\Lib\DEVELO~1\EX7165~1\Sources;C:\Prj\Lib\DEVELO~1\EXPRES~2\Sources;C:\Prj\Lib\DEVELO~1\EXPRES~1\Sources;C:\Prj\Lib\DEVELO~1\EX749C~1\Sources;C:\Prj\Lib\DEVELO~1\EX0A1A~1\Sources;C:\Prj\Lib\Mad\madBasic\BDS4;C:\Prj\Lib\Mad\MADDIS~1\BDS4;C:\Prj\Lib\Mad\MADEXC~1\BDS4;C:\Prj\Lib\Mad\MADKER~1\BDS4;C:\Prj\Lib\Mad\MADSEC~1\BDS4;C:\Prj\Lib\Mad\madShell\BDS4;C:\Prj\Lib\Mad\madShell\DeXter;C:\Prj\Lib\Mad\madExcept\..\Plugins;

我已经从IDE的路径中复制了它,就像我在路径中所做的那样,并使用程序缩短了路径名。
尽管该路径中没有空格,它仍然找不到indy的IdCoder.dcu,位于C:\Program Files\CodeGear\RAD Studio\5.0\lib\Indy10
根据d2007环境变量,$(BDS)显然会扩展为 c:\program files\codegear\rad studio\5.0
IDE认为这是一个有效的库路径。
为什么会发生这种情况呢?我敢打赌这是一个我没有想到的简单错误!
谢谢您的帮助!

请完整显示 dcc32.cfg 文件中的 -U 部分。 - gabr
5个回答

3

在 Delphi 中,当你进行编译或构建时,实际上会在输出选项卡中提供所需的命令行。

  1. 在 Delphi 中正常构建您的项目。
  2. 在底部有一个名为“输出”的选项卡,查找一行标注为“Target CoreCompile”的内容(在 D2007 中可能与其他版本不同)。下面的一行将是用于构建您的项目的命令行(这就是您想要的)。顺便说一句 - 您不必等待项目完成构建,因为您只需要那个 DCC32 命令行调用。此外,如果您之前已经进行过编译,则可能需要右键单击并清除输出,以便在构建之前不会有太多“噪音”。
  3. 单击该行以突出显示它,然后右键单击该行并选择复制。
  4. 打开一个空批处理文件并粘贴。(警告:该行可能非常长)
  5. 现在,转到该行的开头,如果您的 DCC32 编译器路径包含空格,则需要在 DCC32 调用周围放置引号,但不要在参数周围放置引号。
  6. 在 DCC32 调用上方插入一行,并输入 DOS 命令以将目录设置为您的 dpr 文件所在的目录,否则 DCC32 将无法找到您的项目。例如:
    G:然后cd \Apps\MyProject
  7. 保存批处理文件,您就可以开始了。

为赞扬好老的dcc32.exe点赞!它在构建服务器上也很容易设置。 - mjn

3
您可以尝试将路径用引号括起来,这是在Windows中处理带有空格的路径或文件名的标准方式,但我从未在Delphi DCUs中尝试过该方法。

因此,不要使用

$(BDS)\Lib\Indy10

尝试

"$(BDS)\Lib\Indy10"

你也可以尝试

"C:\Program Files\CodeGear\RAD Studio\5.0\lib\Indy10"

检查环境变量是否正确。


也许你需要像Vladimir的示例一样将整个目录列表放在引号中,但我想问题真正出在其他地方... - schnaader
在引号后的某个时刻它开始工作了。不确定还有什么问题,但现在它可以工作了。谢谢! - X-Ray

3
尽管.cfg文件在Delphi 2007命令行编译器中仍然有效,但您应该真正使用MSBuild来编译项目。IDE不再使用CFG文件。您在设计时设置的任何编译器选项都不会写入.cfg文件。使用MSBuild并不比使用.cfg更难。如果您想要更灵活,甚至可以更改实际的构建过程。 使用以下命令来进行编译: msbuild YourProject.dproj

我应该很快前往MS Build。谢谢你的帮助。 - X-Ray

1

当您从命令行编译程序时,$(BDS)环境变量是否设置?如果没有设置,那可能就是问题所在。

在包含空格的路径周围加上引号可能会解决空格问题。这对我有用:

-U"C:\Path to libraries\First library;C:\Path to libraries\Second library;C:\Path to libraries\Third library"


1

检查当前文件夹中是否有applicationname.cfg文件。Dcc32将首先尝试从该文件读取配置。仅当文件不存在时,它才会从dcc32.cfg中读取。


1
不是这样的。dcc32.cfg 仍然会被读取。区别在于哪个更为重要... 如果一个选项在两个 cfg 文件中都设置了,那么 applicationname.cfg 将覆盖 dcc32.cfg 的设置。如果一个选项有多个值(例如搜索路径),那么 applicationname.cfg 中的路径将首先被搜索。类似地,命令行选项优先于 applicationname.cfg 选项。还要注意,命令行选项 --no-config 可用于完全忽略 cfg 文件。 - Disillusioned

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