【发布时间】:2015-08-26 18:11:28
【问题描述】:
在一个 Objective-C 项目中,我试图从环境变量中获取文件路径并将其设置为写入生成文件的位置。这用于在自动测试环境中使用 xcodebuild 运行测试代码,在调用 xcodebuild 之前不会确定文件路径。
为了做到这一点,我在构建设置中输入了一个引用该变量的预处理器宏:
BUILDSERVER_WORKSPACE=\@\"$(WORKSPACE)\"
然后使用该宏设置字符串的值
NSString *workspaceLocation = BUILDSERVER_WORKSPACE;
如果$WORKSPACE 的路径(的字符串值)不包含空格,它可以正常工作,但在路径有空格的情况下,宏预处理器会将空格视为宏分隔符并尝试将它们处理为单独的宏定义。
例如:
$WORKSPACE=/foo/bar/thudblat
将workspacelocation的值设置为@"/foo/bar/thudblat"
但是
$WORKSPACE="/foo/bar/thud blat"
最终创建了多个预处理器定义:
#define BUILDSERVER_WORKSPACE @"/foo/bar/thud
#define blat"
我试图对路径进行字符串化,但是由于只有在我调用 xcodebuild 来构建然后运行时才会出现空格,所以我无法让它工作。
最后,我想要的是简单地采用$WORKSPACE 的路径并将其值设置为NSString *workspaceLocation
因此 workspaceLocation 可能是"\foo\bar\thud blat"
【问题讨论】:
-
您不需要将整个宏表达式放在引号中吗? BUILDSERVER_WORKSPACE="\@\"$(WORKSPACE)\""
-
这肯定会在 build 时获取环境变量的值,还是我遗漏了什么?
-
aha 好点,我正在运行它作为使用 xcodebuild 测试的一部分,所以它正在构建然后立即运行,所以它很可能在构建时评估这个宏.
标签: objective-c macros xcodebuild