2013-02-16 74 views
2

今晚我们有一个恼人的问题,只是出现在Xcode的命令行版本中,而不是来自Xcode的GUI。双引号代表Xcode的搜索路径是什么?

从具有Xcode GUI的机器构建递归用户头搜索路径$ PROJROOT,没有双引号时,我们没有遇到任何问题。但是,当使用Xcode的命令行编译功能构建Jenkins时,会出现Headers不可察觉的错误。

经过一小时左右,有人决定尝试使用双引号(“$ PROJROOT”)来包装复述的$ PROJROOT。一旦发生这种情况,Jenkins的命令行构建项目终于成功了。

所以我们并不完全理解将我们的搜索路径封装在引号中,或省略引号的影响。

任何人都可以阐明究竟是什么导致了这个问题?从命令行到GUI,双引号对编译器意味着什么?

+1

这与bf编程语言有什么关系?或者,你是否正在为自己的标签带来一些创意自由? – Rob 2013-02-16 03:58:27

回答

9

构建机器上的路径很可能在其内部有空间(例如“Macintosh HD/My Project/”)。当从命令行调用工具时,这往往会造成混淆,因为命令行解析器不知道空格字符是路径的一部分,或者它是从另一个命令行参数开始的,所以这就是为什么总是很好地包装双引号内的路径。

另一种选择是使用带空格的反斜杠(例如Macintosh\ HD/My\ Project/),但是在眼睛上跟踪并且难一点。

+0

这确实是问题所在,我在昨晚的文件中发现了一条暗示,但并不确定是这种情况。然而,你是第二个说这是事实的人,所以我必须接受这个答案。 – 2013-02-16 17:25:00

1

当某些工具通过shell执行另一个二进制文件时,可能会出现Bash分词。

勉强有用的人页文档:
http://www.gnu.org/software/bash/manual/html_node/Word-Splitting.html#Word-Splitting

分词的详细描述:
http://mywiki.wooledge.org/WordSplitting

我没有足够的声誉后最后3为链接。与文件名(#1这个名单上)打交道时

常见的陷阱:
mywiki.wooledge.org/BashPitfalls

比较的Posix系统()...
stackoverflow.com/questions/5666962/will -posix-system3 -call-to-an-asynchronous-shell-command-return-immediately

到NSTask(它构建了一个参数数组,因此没有分词)...
stackoverflow.com/questions/412562/execute-a-terminal-command-from-a-cocoa-app