Как да използвам дефиниция __IPHONE_4_0 в C++ библиотека с Xcode?

Опитвам се да разработя C++ библиотека за iOS приложение. Тази библиотека зарежда функциите GLES и OpenAL. Идеята е да се разработи библиотека в C++ и да се използва същия код в iOS и Android (и двете като нативна компилация). Аз съм само с внедряването на iOS и направих примерно приложение с библиотеката и имам този блок в библиотеката:

#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 не може да намери включените файлове, но ако коментирам цялата клаузула if (частта за android също), Xcode може да ги намери всички.

Изреченията #warning показват, че компилаторът чете частта за iphone (с и без коментарирани редове) по време на компилация. Трябва ли да използвам определението по друг начин?

Благодаря предварително!


person goe    schedule 21.05.2012    source източник
comment
Проверете NAMEPROJECT-prefix.pch, трябва да съдържа оригиналния код. Не преименувайте *.mm!   -  person vgonisanz    schedule 21.05.2012


Отговори (1)


Вижте тази публикация Как да открия надеждно Mac OS X, iOS, Linux, Windows в C препроцесор?

Освен това, както знам, макросът __IPHONE_4_0 е дефиниран само в iOS 4.0 SDK. Така че кодът не трябва да работи, ако използвате друга версия на SDK.

Друг подход е да дефинирате свой собствен макрос в настройките за компилиране на Xcode проект (поле „Макроси на препроцесори“) и да го наименувате IOS_BUILD, например. Той ще бъде наличен и в двата вида - object-c и c++ код

person Orange    schedule 11.10.2012