macOS执行make编译报错:/bin/sh找不到指定Xcode文件或目录
问题产生原因
- 根本原因为绝大多数开源软件的Makefile未对Xcode路径中的特殊字符(尤其是空格)做兼容处理:Makefile在调用
xcrun、xcodebuild等工具获取开发工具路径时,会直接读取xcode-select -p的返回结果,且不会对路径中的空格做转义或引号包裹处理,执行时会被shell按空格拆分路径,导致路径被截断为无效值,最终抛出路径不存在、命令未找到的错误(对应错误码127)。 - 之前调整
xcode-select参数、检查IFS等操作无法生效的核心原因:路径拆分行为发生在Makefile执行命令的阶段,不属于全局shell环境变量的配置范畴,修改全局配置不会对Makefile内部的命令解析逻辑生效。
解决方案
方案1:永久解决(推荐)
直接重命名Xcode应用,移除路径中的空格:将/Applications/Development/Xcode 10.app重命名为/Applications/Development/Xcode10.app,之后重新执行sudo xcode-select -s /Applications/Development/Xcode10.app/Contents/Developer即可,所有编译问题会直接消失,无需修改任何编译配置。
方案2:临时生效(无需修改Xcode命名)
每次执行make前手动导出DEVELOPER_DIR环境变量,用引号包裹完整路径:
export DEVELOPER_DIR="/Applications/Development/Xcode 10.app/Contents/Developer" make && make install
该变量会被xcrun优先读取,优先级高于xcode-select的全局配置,仅在当前shell会话中生效。
方案3:单项目兼容
如果仅需要编译单个项目,可找到Makefile中调用xcode-select返回值的相关行,给路径变量外层添加双引号即可,例如将$(shell xcode-select -p)/usr/bin/xcrun修改为"$(shell xcode-select -p)/usr/bin/xcrun"。
内容的提问来源于stack exchange,提问作者Elijah
相关产品推荐
相关产品推荐

