7

私はしばらくEclipseを使用してきましたが、これは私を悩ませています。私は数週間前に ITS8410_LIB という名前のライブラリーを作成し、Reach_Lib というサポート・ライブラリーの作業をしている間、そのままにしておきました。プロジェクトを最初に作成したときに追加したディレクトリ インクルード パスは正常に機能します。今日、Reach_Lib を完成させ、そのパスを ITS8410_Lib に追加しました。プロジェクト プロパティの C++ 設定を使用して、ワークスペース パスを追加しました (以前に何度も行ったように)。ビルド構成は 1 つしかありません。パスは画像に示されています(青で強調表示されているのは、この質問で話している特定のものです)。

ここに画像の説明を入力 ソースにファイルをインクルードしようとすると、Eclipse (黄色のクエスチョン マークが表示されます) もコンパイラ (コンパイラ エラーが発生します) もファイルを見つけることができません。完全な絶対パス構文を使用してディレクトリ パスを追加すると、結果は同じになります。ソース コードを変更し、現在のディレクトリからの完全な相対パスを介して #include を指定すると、それが見つかります。Eclipse は、プロジェクト設定で指定されたパスを使用しません。この同じ Reach_Lib には関連する単体テスト プロジェクトがあり、パスはそこからのワークスペース設定で指定され、正常に動作します。

ここに画像の説明を入力

今日より前に追加されたディレクトリ パスは正常に表示されます。今日追加したパス (この動作を示す 2 つのライブラリがあります) は無視されているようです。コンパイラの設定を確認したところ (下の画像を参照)、コンパイラに指定されたパスは問題ないようです。

ここに画像の説明を入力

Windows7 64 ビット (ただし、Eclipse Indigo の 32 ビット バージョンを使用) で実行されます。私が試してみました:

  1. インデックスの再構築
  2. Eclipse を複数回終了して再起動する
  3. ワークスペースと絶対ファイル パス
  4. インクルード パスの順序の変更
  5. プロジェクト内の異なる .h インクルード ファイル

アップデート

私は .cproject ファイルを調べましたが、これらのファイルがどのように見えるかについてはよくわかりませんが、問題があると思います。おそらく問題は、.cproject ファイルを再構築するように Eclipse に指示するにはどうすればよいかということです。似たようなセクションが 2 つあるようで、Eclipse が混乱しています。サフィックスとしてタグ付けされたさまざまなバージョン番号が表示されます。ビジュアル エディタでは 1 つのセクションを変更できるように見えますが、IDE とコンパイラは他のセクションしか気にしません。ここに関連する部分があります

...

                <folderInfo id="nbeclipse.toolchain.nbl.rel.396284009." name="/" resourcePath="">
                    <toolChain id="nbeclipse.toolchain.nbl.rel.tc.1465290409" name="NetBurner Device Library" superClass="nbeclipse.toolchain.nbl.rel.tc">
                        <targetPlatform id="nbeclipse.toolchain.nbl.rel.tc.targetPlatform.283367649" isAbstract="false" name="NetBurner Module Library" superClass="nbeclipse.toolchain.nbl.rel.tc.targetPlatform"/>
                        <builder buildPath="${workspace_loc:/ITS8410_Lib/Release}" id="nbeclipse.toolchain.nbl.rel.tc.builder.2064025940" keepEnvironmentInBuildfile="false" managedBuildOn="true" name="Release ELF builder (MINGW)" superClass="nbeclipse.toolchain.nbl.rel.tc.builder"/>
                        <tool id="nbeclipse.toolchain.nbl.rel.tc.gcc.278195048" name="GNU C Compiler" superClass="nbeclipse.toolchain.nbl.rel.tc.gcc">
                            <inputType id="nbeclipse.toolchain.nbl.rel.tc.gcc.input.1060035859" name="GNU C Input" superClass="nbeclipse.toolchain.nbl.rel.tc.gcc.input"/>
                        </tool>
                        <tool id="nbeclipse.toolchain.nbl.rel.tc.gpp.767008127" name="GNU C++ Compiler" superClass="nbeclipse.toolchain.nbl.rel.tc.gpp">
                            <option id="nbeclipse.toolchain.super.gcc.directories.includepaths.1666029541" name="Include paths (-I)" superClass="nbeclipse.toolchain.super.gcc.directories.includepaths" valueType="includePath">
                                **inside here is an option list with all my include paths**
                    ...
                </folderInfo>

次に、folderInfo 終了タグの直後に、別の folderInfo セクションが開始されます

                <folderInfo id="nbeclipse.toolchain.nbl.rel.396284009.2022231003" name="/" resourcePath="src">
                    <toolChain id="nbeclipse.toolchain.nbl.rel.tc.1982112905" name="NetBurner Device Library" superClass="nbeclipse.toolchain.nbl.rel.tc" unusedChildren="">
                        <targetPlatform id="nbeclipse.toolchain.nbl.rel.tc.targetPlatform" isAbstract="false" name="NetBurner Module Library" superClass="nbeclipse.toolchain.nbl.rel.tc.targetPlatform"/>
                        <tool id="nbeclipse.toolchain.nbl.rel.tc.gcc.1671008421" name="GNU C Compiler" superClass="nbeclipse.toolchain.nbl.rel.tc.gcc.278195048">
                            <inputType id="nbeclipse.toolchain.nbl.rel.tc.gcc.input.436341699" name="GNU C Input" superClass="nbeclipse.toolchain.nbl.rel.tc.gcc.input"/>
                        </tool>
                        <tool id="nbeclipse.toolchain.nbl.rel.tc.gpp.498310867" name="GNU C++ Compiler" superClass="nbeclipse.toolchain.nbl.rel.tc.gpp.767008127">

                            **the newly added paths don't show up here, if I add them manually things start working** 
4

3 に答える 3

2

答えの鍵は dbrank0 によって投稿されましたが、彼はそれを答えに昇格させなかったので、コメントに賛成票を投じました。.cproject ファイルで問題が発生し、手動で編集して問題を修正しました。

于 2013-02-27T22:58:06.087 に答える
1

インクルード ディレクトリのプロジェクト設定で、相対ワークスペース パスを実際のパスに置き換えてみてください (ファイル システムと同じインクルードを追加します)。

于 2012-09-13T21:07:25.247 に答える
0

完全な絶対パスはいつでも問題ありません。相対ディレクトリを使用する場合は注意が必要です。Eclipse では、現在のディレクトリは実行ディレクトリと同じではありません。

string strRunDir, strCurDir;
strRunDir = AfxGetApp()->m_pszExeName;
strCurDir = GetCurrentDirectory(...);

および strRunDir != strCurDir;

相対ディレクトリを使用する場合は、runDir を参照する必要があります。

于 2012-09-13T14:17:51.453 に答える