【问题标题】:What is the difference between building C++ Builder project from IDE and command line?从 IDE 和命令行构建 C++ Builder 项目有什么区别?
【发布时间】:2011-03-27 18:51:56
【问题描述】:

从 IDE 和命令行构建项目时,编译器的行为不同,我无法解释。

详细问题的描述比较大,其实很简单。

我有一个 C++ Builder 项目,其中包含一个 PAS 文件 (IncludeUnits.pas)。这个 pas 文件列出了几个单位和 inc 文件。这些文件位于单独的文件夹中,这些文件夹列在库中并包含项目选项中的路径。

文件夹布局:

C:\Demo\Bin
C:\Demo\项目
C:\Demo\Project\CBuilder5
C:\Demo\Project\Common
C:\Demo\Source
C:\Demo\Source\Common

Bin 是输出文件夹,Project/CBuilder5 保存项目(bpr-file),Project/Common 保存包含的 pas 文件(IncludeUnits.pas),Source 和 Source/Common 保存其他文件(pas&inc)。我认为这是很常见的布局。

C:\Demo\Project\Common\ IncludeUnits.pas :

unit IncludeUnits;

interface

uses
  Test;

implementation

end.

C:\Demo\Source\ Test.pas :

unit Test;

interface

{$I Test.inc}

implementation

end.

C:\Demo\Source\Common\ Test.inc :

// this file is empty

如果我从 C++ Builder IDE 编译这个项目 - 它会编译得很好。 C++ Builder IDE 在 IDE 设置集中没有任何额外的路径。

现在,我想从命令行编译它。首先,我发出

bpr2mak.exe MyProject.bpr

命令。

此命令创建 MyProject.mak 文件,我可以在其中看到所有路径(“....\Source”和“....\Source\Common”是有问题的路径):

...
INCLUDEPATH = $(BCB)\include;$(BCB)\include\vcl;..\Common;..\..\Source;..\..\Source\Common
LIBPATH = $(BCB)\lib\obj;$(BCB)\lib;..\Common;..\..\Source;..\..\Source\Common
...

现在,我运行 make 命令:

make.exe -B -f"MyProject.mak"

它给了我以下输出:

C:\PROGRA~1\Borland\CBUILD~2\BIN\dcc32 -N2....\Bin -N0....\Bin -$Y+ -$W -$R -v -JPHNE -M -UC:\PROGRA~1\Borland\CBUILD~2\bin..\include;C:\PROGRA~1\Borland\CBUILD~2\bin..\include\vcl;..\Common;..\. .\Source;..\..\Source\Common -D_DEBUG;_RTLDLL;NO_STRICT -OC:\PROGRA~1\Borland\CBUILD~2\bin..\include;C:\PROGRA~1\Borland\CBUILD~ 2\bin..\include\vcl;..\Common;..\..\Source;..\..\Source\Common --BCB ..\Common\IncludeUnits.PAS
Borland Delphi 版本 13.0 版权所有 (c) 1983,99 Inprise Corporation
C:\Demo\Project\Common\IncludeUnits.pas(1) C:\Demo\Project\Common\IncludeUnits.pas(1) C:\Demo\Project\Common\IncludeUnits.pas(1) C:\Demo\ Project\Common\IncludeUnits.pas(6) C:\Demo\Source\Test.pas(1) C:\Demo\Source\Test.pas(5) 致命:找不到文件:'Test.inc'

如您所见 - 所有搜索路径都传递给编译器,文件 (Test.inc) 都在这里 - 在 Source\Common 文件夹中。但是编译器还是找不到?

当然,我从带有 bpr-file 的文件夹中运行这两个命令。将路径更改为绝对路径也无济于事。

将 Test.inc 从 Source\Common 复制到 Source 有所帮助。将 {$I Test.inc} 更改为 {$I Common\Test.inc} 也有帮助。

为什么?看来我错过了什么。请记住:从 IDE 编译项目没有问题,无需复制或更改声明即可找到 Test.inc。我错过了 make 或 dcc32 的一些开关吗?

【问题讨论】:

    标签: command-line ide makefile compilation c++builder-5


    【解决方案1】:

    我找到了原因:dcc32 的命令行错过了 -I 开关,它指定了包含文件的路径。

    出于某种原因,bpr2mak 不尊重此选项。幸运的是,它允许您为转换 bpr -> mak 指定备用模板。我编辑了默认模板并为其添加了“-I”选项,将新模板传递给 bpr2mak - 它起作用了。

    【讨论】:

    • +1 好主意:复制和编辑模板文件,...希望这对我的特殊情况有所帮助 - 这是一种不同的情况
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-12-19
    • 2019-08-29
    • 1970-01-01
    • 2012-01-01
    • 2018-01-04
    • 2017-07-30
    • 2017-08-06
    相关资源
    最近更新 更多