2009-09-08 1 views
38

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

Я попробовал следующее (а также множество вариаций этого), но не повезло до сих пор:

GCC_PREPROCESSOR_DEFINITIONS = '$(GCC_PREPROCESSOR_DEFINITIONS) NEW_VALUE'

NEW_VALUE символ просто никогда не добавляется к определениям препроцессора.

Удалось ли кому-нибудь добавить новые значения в переменные в файлах xcconfig?

ответ

1

Это работает для меня в Xcode 2.4.1:

 
GCC_PREPROCESSOR_DEFINITIONS = "$(GCC_PREPROCESSOR_DEFINITIONS) NEW_VALUE" 

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

+1

Не очень повезло с XCode 3.2 :( –

9

Согласно Xcode Построить Руководство по системному:

Когда блок конфигурации содержит более чем одно определение для конкретной установки в сборки, Xcode использует последнее определение в блоке. Держите в виду, что файлы конфигурации не имеют доступа к настройкам сборки определения, внесенные в конфигурацию файлы, которые они включают. То есть вы не можете изменить определение, сделанное в , включенным конфигурационным файлом; вы можете заменить его.

Таким образом, я предполагаю, что это означает, что невозможно добавить значения к данной переменной.

4

Существует another question с ответом, который может помочь с этой конкретной проблемой. В нем описывается методика, в которой каждый слой составляет подмножество определений, а затем объединяет их вместе на xcconfig на уровне листа.

0

Вы хотите использовать заполнитель $ (унаследованный) для представления значения, унаследованного от более низких уровней, например.

GCC_PREPROCESSOR_DEFINITIONS = "$(inherited) NEW_VALUE" 
+8

Это выглядит как отличный ответ, но это неправильно. '$ (Inherited)' не работает с файлами _within_ xcconfig, в частности, вы не можете использовать его для расширения определения из добавленного файла –

+2

то как вы расширяете? –

29

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

Я рекомендую определить ваши настройки в каскаде. Давайте предположим, что приложение является ваш префикс проекта и сделать это простое определение лишь несколько CFLAGS:

platform.xcconfig:

APP_PLATFORM_CFLAGS = -DMAS=1 

project.xcconfig:

#include "platform.xcconfig" 
APP_PROJECT_CFLAGS = -DBETA=1 

целевой one.xcconfig:

#include "project.xcconfig" 
APP_TARGET_CFLAGS = -DSUPER_COOL=1 
#include "merge.xcconfig" 

цель-два.xcconfig:

#include "project.xcconfig" 
APP_TARGET_CFLAGS = -DULTRA_COOL=1 
#include "merge.xcconfig" 

merge.xcconfig:

OTHER_CFLAGS = $(inherited) $(APP_PLATFORM_CFLAGS) $(APP_PROJECT_CFLAGS) $(APP_TARGET_CFLAGS) 

Тогда вы будете основывать каждый из ваших целей построения конфигураций на target-xxx.xcconfig. Реальный проект будет использовать более сложные настройки, используя конфигурационный файл для проекта и другой для цели, но вы получите эту идею.

Кроме того, помните, что $(inherited) относится к выше уровню в иерархии, а не ранее. Например, он наследуется от уровня проекта на целевом уровне. Не уверен, что это относится и к Xcode 4.

Это упрощение GTM, перейдите туда, чтобы узнать больше.

6

Это работает:

xcodebuild GCC_PREPROCESSOR_DEFINITIONS='$(value) NEW_VALUE' 
+1

Спасибо, я просто использую 'GCC_PREPROCESSOR_DEFINITIONS = $ (значение) NEW_VALUE' хотя (без кавычек). – mkeiser

4

Я думаю, что я наткнулся на немного лучше подхода, пытаясь интегрировать Cocoapods xcconfig файлы в мой собственный. Я хотел бы установить следующее в моих проектах

GCC_PREPROCESSOR_DEFINITIONS = CONFIGURATION_$(CONFIGURATION) 

К сожалению, это вступает в противоречие с определениями, который поставляется с Pods.xcconfig. Как сказано в другом месте, $ (унаследованный) работает не так, как ожидалось. Что делает работу заключается в следующем

GCC_PREPROCESSOR_DEFINITIONS[config=*] = CONFIGURATION_$(CONFIGURATION) $(inherited) 

UPDATE:

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

GCC_PREPROCESSOR_DEFINITIONS[config=*] = CONFIGURATION_$(CONFIGURATION) $(inherited) 
GCC_PREPROCESSOR_DEFINITIONS[config=Debug] = DEBUG=1 CONFIGURATION_$(CONFIGURATION) $(inherited) 

К сожалению, это вон 't work, но добавление второй декларации в файл, который загружается только конфигурацией Debug, будет правильно переопределять настройку.

+0

Синтаксис' 'GCC_PREPROCESSOR_DEFINITIONS [config = *] = ...' ' работает в Xcode 5. Я использовал его в целевых файлах '' .xcconfig' для добавления центрально определенных параметров сборки для всего проекта к целевым настройкам: '' BLA [config = *] = $ (BLA_TARGET_SPECIFIC) $ (BLA_PROJECT_WIDE) ''. – bassim

Смежные вопросы