Command line C栋和x2B栋有什么区别+;IDE和命令行中的生成器项目?

Command line C栋和x2B栋有什么区别+;IDE和命令行中的生成器项目?,command-line,ide,makefile,compilation,c++builder-5,Command Line,Ide,Makefile,Compilation,C++builder 5,当从IDE和命令行构建项目时,我有不同的编译器行为,这是我无法解释的 详细的问题的描述是相当大的,但它真的很简单 我有一个C++ Builder项目,它包含了一个PAS文件(包括Debug单元。此pas文件列出了多个单元和inc文件。这些文件位于单独的文件夹中,这些文件夹列在库中&包括项目选项中的路径 文件夹布局: C:\Demo\Bin C:\Demo\Project C:\Demo\Project\CBuilder5 C:\Demo\Project\Common C:\Demo\Source

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

详细的问题的描述是相当大的,但它真的很简单

我有一个C++ Builder项目,它包含了一个PAS文件(包括Debug单元。此pas文件列出了多个单元和inc文件。这些文件位于单独的文件夹中,这些文件夹列在库中&包括项目选项中的路径

文件夹布局:

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

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

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

unit IncludeUnits;

interface

uses
  Test;

implementation

end.
unit Test;

interface

{$I Test.inc}

implementation

end.
// this file is empty
C:\Demo\Source\Test.pas

unit IncludeUnits;

interface

uses
  Test;

implementation

end.
unit Test;

interface

{$I Test.inc}

implementation

end.
// this file is empty
C:\Demo\Source\Common\Test.inc

unit IncludeUnits;

interface

uses
  Test;

implementation

end.
unit Test;

interface

{$I Test.inc}

implementation

end.
// this file is empty
< >如果我从C++ Builder IDE编译这个项目,它将编译得很好。C++ Builder IDE在井手设置集中没有任何其他路径。 现在,我想从命令行编译它。首先,我提出一个问题

bpr2mak.exe MyProject.bpr

指挥部

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


INCLUDEPATH=$(BCB)\include$(BCB)\include\vcl\普通;。\\来源;。\\来源\通用
LIBPATH=$(BCB)\lib\obj$(BCB)\lib\普通;。\\来源;。\\来源\通用

现在,我运行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\普通;。\\来源;。\\Source\Common-D_调试_RTLDLL;不严格-OC:\PROGRA~1\Borland\CBUILD~2\bin..\include;C:\PROGRA~1\Borland\CBUILD~2\bin..\include\vcl\普通;。\\来源;。\\Source\Common--BCB..\Common\IncludeUnits.PAS
Borland Delphi 13.0版版权所有(c)1983,99 Inprise公司
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文件的文件夹中运行这两个命令。而将路径更改为绝对路径也无济于事

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


为什么??我好像错过了什么。记住:从IDE编译project没有问题,Test.inc是在不复制或更改声明的情况下找到的。我是否遗漏了一些要生成的开关或dcc32?

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

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

+1好主意:复制和编辑模板文件,…希望这对我的特殊情况有所帮助-这是另一种情况