2017-08-16 6 views
2

2つのプロジェクト間で共有されるC++ソースファイル(.cpp)があります.1つはObjective C++を使用し、もう1つはプレーンC++を使用しています。私はObjective C++プロジェクトとプレーンなC++プロジェクトのために異なるコードを使う必要があるそのファイルの一部を持っているので、プロジェクトがObjective C++を使ってコンパイルされているかどうかを確認する必要があります。プリプロセッサを使用しているObjective C++プロジェクトでcppファイルがコンパイルされているかどうかを確認する方法はありますか?

#ifdef __OBJC__ 
    //Objective C++ specific code here 
#else 
    //Plain C++ specific code here 
#endif 

問題が__OBJC__マクロが定義されることはありませんということです、いくつか検索した後、私は__OBJC__マクロファイルはObjective Cのコンパイラでコンパイルので、私はこのコードをしようとしたかどうかを確認するために使用することができることを見出しObjective C++プロジェクトでさえも。 マクロはObjective C++プロジェクトの.mmファイルで定義されていますが、.cppファイルでは定義されていません。

重要な場合は、iOS用のObjective C++プロジェクトをXCodeでコンパイルしています。プレーンなC++プロジェクトは、Visual Studio、XCode、またはGCCを使用してコンパイルできるクロスプラットフォームのコンピュータプログラムです。

私の.cppファイルがObjective C++プロジェクトまたはプレーンなC++プロジェクトでコンパイルされている場合、どのようにプリプロセッサを使用してチェックできますか?

+1

AFAIK、XCodeはプロジェクトの種類からではなく、ファイルの接尾辞から言語を決定します。 – molbdnilo

+1

[ファイルインスペクタの[タイプ]ドロップダウン](https://i.stack.imgur.com/WKOaq.png)でコンパイルモードを変更できます。これはプロジェクトごとの設定です。 –

+0

@JoshCaswellありがとうございます。 "Type"のファイルインスペクタで "Default - C++ source"を "Objective-C++ source"に変更しました。 –

答えて

1

問題は、デフォルトではXCodeがプロジェクトではなく拡張子でファイルタイプを決定するため、.cppファイルがObjective C++プロジェクトの一部であってもプレーンなC++ファイルであると考えたためです。そのファイルに__OBJC__マクロが定義されていませんでした。解決策は、XCodeの左側にあるファイルリストの.cppファイルを右クリックして "Show File Inspector"をクリックし、XCodeの右側の "Type"ドロップダウンで "Objectiveデフォルト「の代わりに "-C++ソース - C++ソース":

enter image description here

これはXCodeのは、それが__OBJC__マクロを定義しますので、.cppファイルが++ファイルのObjective Cであることを考えるようになります。

これはプロジェクト単位の設定であるため、Objective C++プロジェクトにのみ影響し、プレーンなC++プロジェクトでは何も変更されないため、#ifdef __OBJC__は、ファイルがコンパイルされているプロジェクトを確認する手段になります。 this commentに私のアイデアを与えるためのJosh Caswell


感謝。

関連する問題