3

iOSアプリケーション用のC++ライブラリを開発しようとしています。このライブラリは、GLESおよびOpenAL関数をロードします。アイデアは、C ++でライブラリを開発し、iOSとAndroidで同じコードを使用することです(両方ともネイティブコンパイルとして)。私はiOSの実装のみを使用しており、ライブラリを使用してサンプルアプリケーションを実行し、ライブラリ内に次のブロックがあります。

#ifdef _IPHONE_4_0

    #warning"ここで動作するiPhoneSDK4.0を含む"//コンパイル警告がアクティブになっています

    #include <OpenGLES / ES2 / gl.h>
    #include <OpenGLES / ES2 / glext.h>

    #include <OpenAL / al.h>
    #include <OpenAL / alc.h>

    ..。

#elif __ANDROID_API_ // Android

    #warning"ここで動作するAndroidを含む"//コンパイル警告はアクティブではありません
        ..。

#endif

したがって、問題は「#ifdef_IPHONE_4_0」という文にあります。これを使用すると、Xcodeはインクルードファイルを見つけることができませんが、すべてのif句(Android部分も)にコメントすると、Xcodeはすべてのファイルを見つけることができます。

#warning文は、コンパイラがコンパイル時にiphoneの部分(コメントされた行がある場合とない場合)を読み取っていることを示しています。他の方法で定義を使用する必要がありますか?

前もって感謝します!

4

1 に答える 1

1

この投稿を確認してくださいMacOSX、iOS、Linux、WindowsをCプリプロセッサで確実に検出する方法は?

また、私が知っているように、__IPHONE_4_0マクロはiOS4.0SDKでのみ定義されています。したがって、別のバージョンのSDKを使用している場合、コードは機能しないはずです。

もう1つのアプローチは、Xcodeプロジェクトのビルド設定(「プリプロセッサマクロ」フィールド)で独自のマクロを定義し、たとえば、IOS_BUILDという名前を付けることです。これは、objective-cコードとc++コードの両方で利用可能になります

于 2012-10-11T13:06:25.010 に答える