如何在xcconfigvariables中追加值?
我正在使用Xcode和.xcconfig文件。 我试图在预处理器定义中附加一些值,但是我根本无法使其工作。
我尝试了以下(以及这个的许多变化),但到目前为止没有运气:
GCC_PREPROCESSOR_DEFINITIONS = '$(GCC_PREPROCESSOR_DEFINITIONS) NEW_VALUE'
NEW_VALUE
符号不会被添加到预处理器定义中。
有没有人成功地将新值添加到xcconfig文件中的variables?
由于在这个问题的其他答案中陈述的原因,你不能容易地inheritance价值。
我build议在级联中定义您的设置。 让我们假设APP是你的项目前缀,并简单地定义一些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"
目标two.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
将每个目标构buildconfiguration。 一个真正的项目将使用更复杂的设置,使用项目的configuration文件和目标的不同,但你明白了。
另外,请记住, $(inherited)
是指层次结构中较高的层次,而不是较早的层次。 例如,它从目标级别的项目级别inheritance。 不知道这是否也适用于Xcode 4。
这是GTM的简化,去那里了解更多。
根据Xcode构build系统指南:
当configuration单元包含特定构build设置的多个定义时,Xcode将使用单元中的最后一个定义。 请记住,configuration文件无权访问它们包含的configuration文件中的设置定义。 也就是说,你不能修改在一个包含的configuration文件中做的定义; 你只能取代它。
所以,我想这意味着它是不可能附加值给一个给定的variables。
这工作:
xcodebuild GCC_PREPROCESSOR_DEFINITIONS='$(value) NEW_VALUE'
还有一个问题可以帮助解决这个问题。 它描述了一个技术,每个层组成一个定义的子集,然后把它们放在叶级别的xcconfig中。
我想我试图将Cocoapods xcconfig文件集成到我自己的程序中时,遇到了一个稍微好一点的方法。 我喜欢在我的项目中设置以下内容
GCC_PREPROCESSOR_DEFINITIONS = CONFIGURATION_$(CONFIGURATION)
不幸的是,这与Pods.xcconfig附带的定义冲突。 如其他地方所述,$(inheritance)不能按预期工作。 什么工作是以下
GCC_PREPROCESSOR_DEFINITIONS[config=*] = CONFIGURATION_$(CONFIGURATION) $(inherited)
更新:
如果你需要重写一个特定configuration的设置,那么你会试图写一些类似的东西
GCC_PREPROCESSOR_DEFINITIONS[config=*] = CONFIGURATION_$(CONFIGURATION) $(inherited) GCC_PREPROCESSOR_DEFINITIONS[config=Debug] = DEBUG=1 CONFIGURATION_$(CONFIGURATION) $(inherited)
可悲的是,这将无法正常工作,但将第二个声明放入一个文件,只有通过debuggingconfiguration加载将正确覆盖设置。
这在Xcode 2.4.1中适用于我:
GCC_PREPROCESSOR_DEFINITIONS =“$(GCC_PREPROCESSOR_DEFINITIONS)NEW_VALUE”
在编辑configuration文件和目标的Build Info中显示的变化之间,你必须有几秒的时间。
你想使用占位符$(inheritance)来表示从较低级别inheritance的值,例如
GCC_PREPROCESSOR_DEFINITIONS = "$(inherited) NEW_VALUE"