it-swarm.com.ru

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

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

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

#if TARGET_IPHONE_SIMULATOR
    ...
#endif
95
Steph Thirion

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

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

constant_1=VALUE constant_2=VALUE

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

113
Ben Gottlieb

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

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

86
cdespinosa

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

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

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

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

objectManager.client.baseURL = APPURL_NSString;
41
Stickley

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

5
chunkyguy

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

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

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

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

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

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

2
hEADcRASH

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

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

1
Mark24x7

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

  1. Выберите свой проект

    select project

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

    select build settings

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

    search1search2

  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
Petr Javorik

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

0
kslcam