出力ファイルにフルパスが含まれるのを防ぐ
テクニカル・ノート 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を参照してください。
全ての製品名は、それぞれの所有者の商標または登録商標です。