今晚我们遇到了一个烦人的问题,只能在Xcode的命令行构建中出现,而不是来自Xcode的GUI。
当使用带有Xcode GUI的机器构建,带有$ PROJROOT的递归用户头搜索路径,没有双引号时,我们没有遇到任何问题。但是,当使用使用Xcode的命令行构建功能的Jenkins进行构建时,会抛出Headers不可用的错误。
经过一个小时的探索,有人决定尝试用双引号包装反复的$ PROJROOT(“$ PROJROOT”)。一旦发生这种情况,Jenkins命令行的建设终于成功了。
因此,我们并未完全理解在引号中包装搜索路径或省略引号的后果。
任何人都可以了解究竟是什么导致了这个问题?什么双引号从命令行对GUI表示编译器?
答案 0 :(得分:9)
您的构建计算机上的路径很可能在其中有一个空格(例如“Macintosh HD/My Project/
”)。当从命令行调用工具时,这往往会让事情变得混乱,因为命令行解析器不知道空格字符是路径的一部分,或者它是否从另一个命令行参数开始,所以这就是为什么它总是很好的包装双引号内的路径。
另一个选择是使用带有空格的反斜杠(例如Macintosh\ HD/My\ Project/
),但是要更难以跟踪和更难看到眼睛。
答案 1 :(得分: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