2016-08-12 5 views
0

prefix.pchファイルに指定されているインポートステートメントがVMKChilkatWrapper.hという名前の特定の.hファイルに追加されないようにするにはどうすればよいですか?Prefix.pch:特定のファイルに使用しない方法は?

私は、次の試してみた:

#if !__has_include("VMKChilkatWrapper.h") 
#if !strcmp(__FILE__, "VMKChilkatWrapper.h") 
#if !strcmp(__BASE_FILE__, "VMKChilkatWrapper.h") 

しかし、たとえしようとの時間後、私はそれを動作させることはできません。これは可能ですか?

なぜ私はこれをしたいですか?

私は2,個のファイルを持っています(Objective-C++)。 Objective-Cクラスをインポートすると、@importを使用できなくなります。

したがって、.mmファイルにインポートされる唯一のクラスであるラッパークラスを作成しました。

また、#ifdef __OBJC__を私のPrefix.pchファイルに使用して、Objective-Cヘッダーファイルが私の.mmファイルにインポートされないようにします。

しかし、#ifdef __OBJC__は、私のPrefix.pchファイルがVMKChilkatWrapperに含まれないようにしていません。したがって、Prefix.pchファイル内にあるファイルに対しては、@importディレクティブは機能しません。

現時点では、Prefix.pchファイルのインポートステートメントを取り除くのが最善の解決策であると私は信じています。

+0

達成しようとしていることは何ですか?インポートされたプレフィックスがあなたを悩ませる理由 –

+0

私は私の質問に説明を追加しました。 – vomako

答えて

1

@importを使用しないことをお勧めします。代わりに古いファッション#importを使用してください。 問題がある場合は、Swiftのように、必要な場所で@importを使用してください。

解決策も1つあります。 #ifdef __OBJC__ #ifndef __cplusplus#endif #endifブロックにインポートしてください。 例

#ifdef __OBJC__ 
#ifndef __cplusplus 
@import ... 
#endif 
#endif 
+0

'#ifndef __cplusplus'を追加すると動作しました。ありがとうございました! – vomako

0

できません。

プレフィックスヘッダーは、コンパイルする前にすべての実装ファイルに追加されます。現時点では、そのファイルに含まれる他のヘッダーファイルについての情報はありません。

これが必要な場合は間違っています。プレフィックスヘッダーの唯一の目的は、フレームワークヘッダーをプリコンパイルしてコンパイルを高速化することです。そこに物を追加するだけで、すべての実装ファイルで利用できるようになり、アンチパターンになります。

関連する問題