2012-05-21 1 views
3

Я пытаюсь разработать библиотеку C++ для приложения iOS. Эта библиотека загружает функции GLES и OpenAL. Идея состоит в том, чтобы создать библиотеку на C++ и использовать тот же код в iOS и Android (как в качестве встроенной компиляции). Я только с реализацией IOS, и я сделал пример приложения с библиотекой и у меня есть этот блок внутри библиотеки:Как использовать определение __IPHONE_4_0 в библиотеке C++ с Xcode?

 
#ifdef _IPHONE_4_0 

    #warning "Including iPhone SDK 4.0 working here"  // compiling warning is actived 

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

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

    ... 

#elif __ANDROID_API_ // Android 

    #warning "Including Android working here" // Compiling warning is not actived 
     ... 

#endif 

Таким образом, проблема приходит с предложением «#ifdef _IPHONE_4_0». Если я его использую, Xcode не может найти файлы include, но если я прокомментирую все , если clausule (часть android тоже), Xcode может найти все из них.

#warning предложения показывают, что компилятор читает часть iphone (с комментариями и без строк) во время компиляции. Нужно ли использовать определение другим способом?

Заранее благодарен!

+1

Проверьте, что NAMEPROJECT-prefix.pch должен содержать исходный код. Не переименуйте * .mm! – vgonisanz

ответ

1

Проверить этот пост How to detect reliably Mac OS X, iOS, Linux, Windows in C preprocessor?

Кроме того, как я знаю, __IPHONE_4_0 макрос определен только в IOS 4.0 SDK. Поэтому код не должен работать, если вы используете другую версию SDK.

Другой подход - определить свой собственный макрос в настройках сборки проекта Xcode (поле «Макросы препроцессоров») и назвать его IOS_BUILD, например. Он будет доступен как в объектно-c, так и в коде C++