出力ファイルにフルパスが含まれるのを防ぐ

テクニカル・ノート 59374

アーキテクチャ:

All

コンポーネント:

general

更新日:

2018/09/04 7:20

はじめに

多くのプロジェクトにおいて、出力ファイルにフルパスが含まれることは期待されません。

解説

出力ファイルにフル パスが含まれている場合、別の場所で再ビルドするとビルド結果が異なる場合があります。

この問題の典型的な原因として考えられるのは、アプリケーションにおいてassertマクロが使用されており、このマクロによって__FILE__マクロが使用されていることが考えられます。__FILE__マクロは、現在のファイルのフルパスを出力します。

もう 1 つの理由は、別の場所でデバッグ構成を構築する場合です。

提案

  • Assertを回避する
    条件付きコンパイルを行うことで、assertメッセージを発生させないようにできます。 ファイル installation_path\target\inc\c\assert.h は、次の構造を使用して、リリース構成時は、生成される出力ファイルにアサート メッセージが組み込まれないようにします。
     
          #ifdef NDEBUG
                #define assert(test) ((void)0)​
        
  • マクロにパスを含めない
    Project > Options > C/C++ Compiler > Extra Options に以下のオプションを使用することで実現します:
          --no_path_in_file_macros​
  • デバッグ情報を含むビルド
    デバッグ情報は、フル パスを使用してソース ファイルを参照します。 このシナリオで確定的な出力を得るには、同じ場所にビルドする必要があります。

まとめ

このテクニカル ノートの提案を使用して、出力ファイルのフル パスを回避してください。

出力ファイルの差異は、他の理由も考えられます。 詳細については、technical note 221111を参照してください。

 

全ての製品名は、それぞれの所有者の商標または登録商標です。

申し訳ございませんが、弊社サイトではInternet Explorerをサポートしていません。サイトをより快適にご利用いただくために、Chrome、Edge、Firefoxなどの最新ブラウザをお使いいただきますようお願いいたします。