Как определить символ препроцессора в Xcode

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

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

#if TARGET_IPHONE_SIMULATOR
    ...
#endif

Ответ 1

Перейдите к настройкам Target или Project, щелкните значок Gear в левом нижнем углу и выберите "Добавить пользовательские настройки". Новое имя параметра должно быть GCC_PREPROCESSOR_DEFINITIONS, и вы можете ввести свои определения в правое поле.

Per Steph комментарии, полный синтаксис:

constant_1=VALUE constant_2=VALUE

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

Ответ 2

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

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

Ответ 3

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

В настройках сборки → Макросы препроцессора, и да, в определении важны обратная косая черта:

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

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

objectManager.client.baseURL = APPURL_NSString;

Ответ 4

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

Ответ 5

Это под "GCC 4.2 Preprocessing" (или просто поставить "prepro" в поле поиска)...

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

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

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

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

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

Ответ 6

В ответ на комментарий Кевина Лайти (см. ответ cdespinosa) о разделе предварительной обработки GCC, не отображаемом в настройках сборки, сделайте Active SDK тем, который говорит (Base SDK) после него, и этот раздел появится. Вы можете сделать это, выбрав меню Project > Set Active Target > XXX (Base SDK). В разных версиях XCode (Base SDK) могут быть разные, например (Project Setting или Project Default).

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

Ответ 7

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