Как определить символ препроцессора в 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
Вы можете дублировать цель, которая имеет раздел предварительной обработки, переименовать ее в любое имя, которое вы хотите, а затем изменить значение макроса препроцессора.