ソース ファイルの定義を使用して、2 つの異なるソース ファイルでヘッダー ファイルを異なる方法でコンパイルすることは可能ですか?
たとえば、次のように 2 つのソース ファイルに 1 つのヘッダーが含まれているとします。
header.h:
#if FOO
#define BAR(x) f(x)
#else
#define BAR(x) g(x)
#endif
source1.cpp:
#define FOO 1
#include "header.h"
void a(int x) {
BAR(x); // f(x)?
}
source2.cpp
#include "header.h"
void b(int x) {
BAR(x); // g(x)?
}
これは、関数 a が f を実行し、関数 b が g を実行するようにコンパイルすべきではありませんか?
XCode と Objective-C++ でこれを実行しようとしています。a と b の両方が、あたかも source1.cpp が FOO を定義していないかのように g を実行します。