Добавление определения препроцессора через схему XCode - PullRequest
15 голосов
/ 30 ноября 2011

В настоящее время у меня есть ряд специальных «разновидностей» приложения для iPhone, которые мне нужно создать. В идеале я хотел бы иметь схему для каждого «аромата», и каждая схема будет определять (или устанавливать) одно или несколько определений препроцессора, которые я могу использовать для перехода в своем коде и, возможно, даже предварительно обрабатывать мой файл info.plist. Очевидно, что это можно сделать с несколькими целями, но, поскольку у меня может быть много разных «разновидностей» приложения, было бы здорово сделать это с помощью схем, чтобы уменьшить количество целей. Моя текущая мысль состоит в том, чтобы добавить эти определения препроцессора во время сценария предварительного действия, но я не могу на всю жизнь найти способ обновить GCC_PREPROCESSOR_DEFINITIONS. Поскольку это переменная среды, не должен ли я иметь доступ для добавления в GCC_PREPROCESSOR_DEFINITIONS?

Ответы [ 4 ]

14 голосов
/ 01 декабря 2011

В худшем случае вы можете сделать сценарий перед сборкой для схемы.Вы должны будете включить сценарий для каждой схемы, хотя:

Я бы предпочел присоединить его к конфигурации:

Затем вы можете легко добавить макросы препроцессора дляразличные конфигурации, как у меня здесь для отладки:

Файл _Prefix.pch является отличным местом для размещения макросов, влияющих на всю программу, как у меня здесь:

В моем примере мы эффективно отключаем консольный вывод, когда не в режиме отладки, обеспечивая небольшое повышение скорости.

8 голосов
/ 05 декабря 2011

Чтобы удовлетворить мое требование разрешить схемам задавать определения препроцессора, лучшее решение, которое я придумал, - это чтобы сценарии перед действием и сценарии после действия модифицировали файл xcconfig.Этот файл, в свою очередь, обновляет конфигурацию сборки, устанавливает определения препроцессора и даже позволяет мне определять определения препроцессора для условного изменения info.plist.Если кто-то еще пойдет по этому пути, убедитесь, что вы учитываете, как этот файл обрабатывается системой контроля версий.

Вопрос этой статьи и связанные с ним ответы были полезны для меня: Как добавить значения в переменные xcconfig

0 голосов
/ 07 марта 2014

Если я правильно понял ваш вопрос, вы хотите добавить некоторые определяемые пользователем макросы препроцессора в ваш исходный код, есть способ добавить их в вашу цель с помощью Xcode. (например, GCC_PREPROCESSOR_DEFINITIONS = USE_TAPJOY)

Шаг 1) Определите имя marco, например, USE_TAPJOY Шаг 2) Перейдите к цели-> выберите вкладку «Настройка сборки» (убедитесь, что все вкладки включены) Шаг 3) в поле поиска найдите «Макрос препроцессора») Шаг 4) Проверьте раздел отладки / выпуска Шаг 5) Введите свой Марко там enter image description here

Шаг 6) Используйте этот макрос в вашем исходном коде, как показано ниже

For conditional include 

    #ifdef USE_TAPJOY
    #import <Tapjoy/Tapjoy.h>
    #endif

    For conditional source code
    #ifdef USE_TAPJOY        // Tapjoy Connect Notifications
            [[NSNotificationCenter defaultCenter] addObserver:self
                                                     selector:@selector(tjcConnectSuccess:)
                                                         name:TJC_CONNECT_SUCCESS
                                                       object:nil];
            [[NSNotificationCenter defaultCenter] addObserver:self
                                                     selector:@selector(tjcConnectFail:)
                                                         name:TJC_CONNECT_FAILED
                                                       object:nil];
    #endif

Удачи

0 голосов
/ 02 декабря 2011

Как насчет определения нескольких целей и определения макросов препроцессора в опциях сборки для конкретных целей?Тогда вам нужна только одна схема, и вы можете собрать все цели за один выстрел, все со своими собственными конфигурациями сборки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...