1.H:
#define CONFLICTINGMACRO(a, b) {doSomething(a, b)}
2.H:
#define CONFLICTINGMACRO(a, b, c) {doSomethingElse(a, b, c)}
を
いくつかのファイルは両方のヘッダーをインポートしますが、間違った定義(最初に読み込まれたもの)を見つけます。
I(再)他のシンボルを定義し、このファイルには、コンパイラを経由して、プロジェクトのすべてのソースファイルにグローバルに追加され
redefinitions.hと呼ばれるファイル内のプロジェクトの(Linuxでは利用できません例えば、Windowsの機能と種類)フラグ:他の機能を迅速かつ簡単にデバッグするための
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -include redefinitions.h")
(私は今、競合するマクロを必要としない)私はredefinitions.hに以下の行を追加してみました:
#ifdef CONFLICTINGMACRO
#undef CONFLICTINGMACRO
#endif
#define CONFLICTINGMACRO(...) {}
残念ながら、これは違いはありません。私の最高の推測は、これは* .hファイルがロードされる順序と関係があるということです。
プロジェクト全体のプロジェクトのさまざまなヘッダーファイルで定義されているマクロをどのようにオーバーライドすることができますか?
おそらく '1.h'と' 2.h'ファイルを編集することはできません。 – Smeeheey
残念なことに、何千ものファイルに広がっているこれらの紛争の大多数は(なぜか、私はまだこの混乱によって幾分馬鹿げています...編集したり、編集用のスクリプトを書いたりするまでにはかなりの時間がかかります(もちろん、将来行わなければならないことです)。 –
コンパイラにマクロ定義などの特定のマクロ定義を無視するように指示する方法はわかりません。 – Tsyvarev