В Xcode я могу редактировать макросы препроцессора в настройках проекта. Я хочу создать макрос, который ссылается на переменную среды. По сути, я хочу иметь возможность ссылаться на $ SRC_ROOT в моем коде. В моих макросах сейчас есть:
SRC_ROOT=${SRC_ROOT}
но это не работает.





В настройках сборки Xcode вы на самом деле не ссылаетесь на значение переменной среды. Вместо этого вы имеете в виду значение настройка сборки. Синтаксис для этого - $(SETTING_NAME) в стиле Makefile, а не в стиле оболочки ${SETTING_NAME}, который вы использовали выше.
Итак, что вы хотите сделать, это добавить
SRC_ROOT = "$(SRCROOT)"
в настройку сборки Макросы препроцессора.
В качестве дополнительного бонуса, если вы знаете, что ваши макросы не повлияют на содержимое вашего предварительно скомпилированного файла префиксов, вместо Макросы препроцессора вы должны использовать Макросы препроцессора не используются в предварительно скомпилированных заголовках.
Таким образом, вы можете улучшить совместное использование вашего предварительно скомпилированного заголовка префикса (определенного файлом pch) между разными целями в вашем проекте или даже разными проектами. Техническая нота 2190: Ускорение ваших сборок Xcode более подробно описывает это: если вы используете одно и то же имя и содержимое файла префикса и строите с одинаковыми настройками сборки в нескольких проектах, вы можете значительно улучшить производительность сборки, потому что Xcode распознает, когда он может повторно использовать существующие предварительно скомпилированные файлы префиксов.
Обратите внимание, что если вы установите переменную среды в действии перед сборкой для всей схемы, это не поможет, поскольку она определяется в подоболочке - следовательно, она не будет приниматься во внимание в процессе сборки.
Теперь, как мне использовать это значение в моем коде, например, просто для того, чтобы напечатать это значение в окне отладки?
Загадайте меня вот так: если я редактирую настройки проекта (не целевого) приложения iPhone и ищу в каждой конфигурации «Макросы препроцессора» ... я вижу раздел «GCC 4.2 - Preprocessing» и «Макросы препроцессора» и т. д. al для конфигураций Ad-Hoc, Release и Distribution ... но ничего для конфигураций Debug и Analyzer - хотя последние два ДОЛЖНЫ иметь три пользовательских параметра: GCC_C_LANGUAGE_STANDARD (c99), GCC_WARN_ABOUT_RETURN_TYPE (YES) и GCC_WARN_UNUSED_VARIAB.