3

MSP430 に IAR Embedded Workbench 5.51 を使用しています。C99を使用しています。

サードパーティ ライブラリのコードをインクルードしようとしています。このサードパーティ ライブラリのディレクトリ構造を、メイン プロジェクト ディレクトリのサブディレクトリ内に正確にコピーしました。ただし、コンパイルしようとすると、たくさんの

致命的なエラー [Pe1696]: ソース ファイル "ThirdPartyLib/Subdir/file.h" を開けません

ただし、ログ IAR には次のように表示されます。

検索: 「C:\ ... bla bla bla ... \Source\ThirdPartyLib\Subdir\」

このライブラリの各ソース ファイルの include ステートメントはすべて次のようになります。

#include "ThirdPartyLib/Subdir/someheader.h"

次のようにして、C プリプロセッサへのパスを追加しようとしました。

プロジェクト -> オプション -> C/C++ コンパイラ -> プリプロセッサ

次の行を追加します。

$PROJ_DIR$\ThirdPartyLib\
$PROJ_DIR$\ThirdPartyLib\Subdir\
$PROJ_DIR$\ThirdPartyLib\Utils\

「マルチファイルコンパイル」にチェックを入れていません。

問題のソース ファイルはすべてプロジェクトに追加されています。ライブラリのディレクトリ構造を模倣するグループを作成しました。

パスを絶対パスから次のような相対パスに変更すると、問題は解決します

#include "somelocalheader.h"
#include "../Utils/someotherheader.h"

しかし、私は多数のファイルを扱っており、それらをできるだけ変更したくありません。

これまで問題が発生したことはありません-なぜこれが起こるのか誰にもわかりません. すべての c ファイルのすべての include ステートメントをスクラブする必要がないように、これに対する簡単な修正はありますか?

これは基本的に、私のディレクトリツリーがどのように見えるかです:

  • ソース
    • デバッグ
      • EXE
        • 出力.d43
      • リスト
        • blabla.map
      • オブジェクト
        • ...
    • リリース
      • ...
    • 設定
      • ...
    • サードパーティ ライブラリ
      • サブディレクトリ
        • ... サード パーティのコード ファイルはここにあります ...
      • ユーティリティ
        • ... その他のサードパーティ コード ファイルはここに存在します ...
    • ... 私のコードは、EWP、EWW などと共にここに存在します ...

編集 #2: /Source/ で doxygen を再帰的に実行したため、ThirdPartyLib のディレクトリを 1 つ上のレベルに移動しました。これには doxygen が永遠に必要であり、ライブラリには独自の API があることに気付きました。

とにかく、今の構造は次のようになります。

  • ワーキングコピー
    • ソース
      • デバッグ
        • EXE
          • 出力.d43
        • リスト
          • blabla.map
        • オブジェクト
          • ...
      • リリース
        • ...
      • 設定
        • ...
      • ... 私のコードは、EWP、EWW などと共にここに存在します ...
    • サードパーティ ライブラリ
      • サブディレクトリ
        • ... サード パーティのコード ファイルはここにあります ...
      • ユーティリティ
        • ... その他のサードパーティ コード ファイルはここに存在します ...

2 つのサブグループ SubDir および Utils を使用して、ThirdPartyLib のプロジェクトにグループを追加し直し、Subdir および Utils ディレクトリのすべてのファイルを対応するサブグループに追加しました。

これを再度コンパイルしようとしましたが、Pe1696 エラーに直面しました。IAR は次のように述べています。

searched: "C:\...\Working Copy\ThirdPartyLib\SubDir"

それでも、まだファイルが見つかりません。

この投稿を参照しました: http : //e2e.ti.com/support/low_power_rf/f/155/t/110195.aspx '落ちた'。IAR は明らかにファイルを検索しています。

とにかく、次の行をプリプロセッサに追加しようとしました

$PROJ_DIR$\..\ThirdPartyLib\SubDir
$PROJ_DIR$\..\ThirdPartyLib\utils

これは役に立たないようです。メッセージ ログに次の行が追加されます。

searched: "C:\...\Working Copy\Source\..\ThirdPartyLib\SubDir\"
searched: "C:\...\Working Copy\Source\..\ThirdPartyLib\Utils\"

編集 #3 EWW/EWP を 1 レベル上げて「作業コピー」にしてから、すべてのグループとすべてのファイルを再読み込みしてみました...サイコロはありません。私はここで迷っています。最も苛立たしいのは、以前の開発者によって行われた別のプロジェクトに同じライブラリが実装されており、同じ方法でそれを含めようとしていることです。これが些細なことになることはわかっていますが、何がわからないだけです。

4

1 に答える 1

3

#includeライブラリ内のすべての参照が の形式#include "ThirdPartyLib/Subdir/file.h"である場合、 が配置されているルート ディレクトリThirdPartyLibは、プリプロセッサのインクルード パスにある必要があります。

ディレクトリ構造が次の場合:

C:\My Project\Source
             \ThirdPartyLib

その後C:\My Project、プリプロセッサのインクルード パスにあると予想されます。

#includeコンパイラがインクルード ファイルを検索するとき、一致するファイルが見つかるまで、ディレクティブにリストされたパスを含む各インクルード検索パスを順番に結合します。

于 2013-07-10T23:27:45.097 に答える