Как использовать определение __IPHONE_4_0 в библиотеке C++ с Xcode?

Я пытаюсь разработать библиотеку С++ для приложения 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. Он будет доступен как в коде Objective-C, так и в коде C++.

person Orange    schedule 11.10.2012