1

IDEとコマンドラインからプロジェクトをビルドするとき、コンパイラの動作が異なりますが、説明できません。

詳細な問題の説明はかなり大きいですが、それは本当に簡単です。

PASファイル(IncludeUnits.pas)が含まれているC++Builderプロジェクトがあります。このpas-fileには、いくつかのユニットとinc-filesがリストされています。これらのファイルは別々のフォルダーにあり、これらのフォルダーはプロジェクトのオプションのlibrary&includeパスにリストされています。

フォルダーのレイアウト:

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

ビンは出力フォルダーであり、Project / CBuilder5はプロジェクト(bpr-file)を保持し、Project / Commonはインクルードされたpas-file(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 BorlandDelphi
バージョン13.0Copyright(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にコピーすると役立ちます。{$ITest.inc}を{$ICommon\Test.inc}に変更することも役立ちます。

なんで?何かが足りないようです。注意:プロジェクトはIDEからのコンパイルに問題はなく、Test.incは宣言をコピーまたは変更せずに検出されます。makeまたはdcc32への切り替えを見逃しましたか?

4

1 に答える 1

4

私は理由を見つけました:dcc32のコマンドラインが-Iスイッチを見逃します。これはインクルードファイルのパスを指定します。

何らかの理由で、bpr2makはこのオプションを尊重しません。幸い、変換bpr->makの代替テンプレートを指定できます。デフォルトのテンプレートを編集して「-I」オプションを追加し、新しいテンプレートをbpr2makに渡しました-そしてそれは機能しました。

于 2010-08-10T21:50:00.273 に答える