私はassert.h
というファイルをいくつかのアサーションマクロを定義しています。このプロジェクトはCore
と呼ばれ、同じ名前のフォルダに存在します。ただし、このファイルはCore/hul
にあります。これは、いくつかの抽象ユーティリティを実装するプロジェクトのサブモジュールです。ここでは、ファイルの抜粋です:Xcode/clangに間違ったファイルが含まれています
#if defined(HUL_DEBUG)
# if defined(HUL_TEST)
# define HUL_ASSERT(e) HUL_TEST_ASSERT(e)
# else
# include <assert.h>
# define HUL_ASSERT(e) assert(e)
# endif
#else
# define HUL_ASSERT(e) /* empty, do nothing */
#endif
あなたが見ることができるように、HUL_TEST
に定義されたアサーションマクロは、ユニットテストアサーションコールバックに展開したとき。それはうまく動作します。リリース用にコンパイルするときは(例えばHUL_DEBUG
は定義されていません)、何もしません。また、大丈夫です。デバッグのために(テストなしで)コンパイルすると、システムのassert.h
が含まれ、assert
に展開されるマクロが定義されます。これまでのところすべてOK。
問題は、<hul/assert.h>
または<assert.h>
を含めても、常に含まれているhul/assert.h
です。これは、私が望むものではありません。これは、hul/assert.h
がhul
フォルダの資格を持つ理由の1つです。
最初に確認するのは、Other C Flags
とHeader Search Paths
です。しかし、その後は空で、次のように前者は次のとおりです。
-I../../include/Core
-I../../test/include/Core
-I../../test/include
あなたが見ることができるように、Core/hul
が含まれていないので、#include <assert.h>
はhul/assert.h
に解決すべきではありません。問題は、それはなぜですか?私はいくつかの設定が欠けていますか?
注:もちろん、私はファイルの名前を変更することができますが、なぜこれが起こっているのか理解しています。このフレームワークは依然としてファイルの数が膨大になり、この種の競合については気にしたくありません。
完璧!ありがとうございました。 –