Как определить символ препроцессора в Xcode - PullRequest
94 голосов
/ 15 декабря 2008

Можно ли установить символ для условной компиляции, настроив свойства в проекте Xcode?

Моя цель - создать символ, который будет доступен для всех файлов без необходимости использовать импорт / включение, чтобы набор общих классов мог иметь особое поведение в некоторых проектах. Как и в следующем случае, но с моими собственными символами.

#if TARGET_IPHONE_SIMULATOR
    ...
#endif

Ответы [ 8 ]

113 голосов
/ 15 декабря 2008

Перейдите в настройки Target или Project, щелкните значок Gear в левом нижнем углу и выберите «Add User-Defined Setting». Имя нового параметра должно быть GCC_PREPROCESSOR_DEFINITIONS, и вы можете ввести свои определения в правом поле.

Согласно комментариям Стефа, полный синтаксис:

constant_1=VALUE constant_2=VALUE

Обратите внимание, что вам не нужно '=, если вы просто хотите # определить символ, а не присваивать ему значение (для #ifdef операторов)

86 голосов
/ 26 января 2009

Вам не нужно создавать пользовательские настройки. Встроенная настройка «Макросы препроцессора» работает просто отлично. альтернативный текст http://idisk.mac.com/cdespinosa/Public/Picture%204.png

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

40 голосов
/ 09 января 2012

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

В настройках сборки -> Макросы препроцессора, и обратная косая черта да имеет решающее значение в определении:

APPURL_NSString=\@\"www.foobar.org\"

И в исходном коде:

objectManager.client.baseURL = APPURL_NSString;
5 голосов
/ 21 января 2012

Вы можете использовать файл *_Prefix.pch для объявления макросов проекта. Этот файл обычно находится в вашей Других источниках группе.

2 голосов
/ 06 сентября 2009

Он находится под «GCC 4.2 Preprocessing» (или просто поместите «prepro» в поле поиска) ...

... однако, ради жизни я не могу заставить его работать.

У меня есть стандартные конфигурации Debug и Release, и я хочу определить DEBUG = 1 в конфигурации отладки. Но после добавления его в качестве значения:

(в окне настроек)> Макросы препроцессора: DEBUG = 1

#if DEBUG
    printf("DEBUG is set!");
#endif 

... никогда не печатает / не вызывается. Это сводит меня с ума ...

1 голос
/ 31 июля 2018

Для проектов Xcode 9.4.1 и C ++. Добавление const char* макросов препроцессора к Debug и Release build.

  1. Выберите ваш проект

    select project

  2. Выбрать Настройки сборки

    select build settings

  3. Поиск " Макросы препроцессора "

    search1 search2

  4. Открыть интерактивный список

    open interactive list

  5. Добавьте свои макросы и не забудьте экранировать цитату

    add path

  6. Использовать в исходном коде как обычно const char*

    ...
    #ifndef JSON_DEFINITIONS_FILE_PATH
    static constexpr auto JSON_DEFINITIONS_FILE_PATH = "definitions.json";
    #endif
    ...
    FILE *pFileIn = fopen(JSON_DEFINITIONS_FILE_PATH, "r");
    ...
    
1 голос
/ 22 апреля 2010

В ответ на комментарий Кевина Лейти (см. Ответ cdespinosa) о том, что раздел «Предварительная обработка GCC» не отображается в настройках вашей сборки, установите Active SDK с надписью (Base SDK) после него, и появится этот раздел. Это можно сделать, выбрав меню «Проект»> «Установить активную цель»> «XXX» (базовый SDK). В разных версиях XCode (базовый SDK) может отличаться, например (настройка проекта или проект по умолчанию).

После появления этого раздела вы можете добавить свои определения в макросы процессора, а не создавать пользовательские настройки.

0 голосов
/ 08 сентября 2010

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

...