2008-12-15 2 views
91

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

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

#if TARGET_IPHONE_SIMULATOR 
    ... 
#endif 

ответ

113

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

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

constant_1=VALUE constant_2=VALUE 

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

+0

Либо используйте обратные косые черты перед подчеркиваниями, чтобы они не превращали текст в курсив или не использовали обратные кавычки, чтобы приложить материал для программирования - вот что я сделал. – 2008-12-15 05:41:26

+0

Спасибо, Джонатан! – 2008-12-15 13:34:56

+2

Спасибо! Кто бы ни интересовался, синтаксис выглядит как «kVarOne = 5 myVar = 3.0» (без кавычек), я нашел его методом проб и ошибок. Бен, вы можете отредактировать свой ответ, чтобы указать это? Еще раз спасибо. – 2008-12-20 02:56:24

86

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

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

2

Это под «GCC 4.2» предварительной обработки (или просто поставить «препро» в окне поиска) ...

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

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

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

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

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

1

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

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

0

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

39

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

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

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

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

objectManager.client.baseURL = APPURL_NSString; 
4

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