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への切り替えを見逃しましたか?