执行Makefile的lint目标报错:syntax error: unexpected end of file
解决Makefile中lint目标的
syntax error: unexpected end of file错误 问题原因
Makefile默认会为每一行缩进的命令启动独立的shell进程执行。你的lint目标中,if语句跨了多行,换行后的代码属于新的shell进程,导致if结构不完整,触发语法错误。同时,PATH的修改也无法传递到后续命令,因为每个命令都在单独的shell中运行。
修正方案
将所有命令整合到单个shell进程中执行,有两种可行方式:
方式1:用反斜杠连接命令行
lint: @echo "Checking with SwiftLint" ; \ if test -d "/opt/homebrew/bin/"; then \ PATH="/opt/homebrew/bin/:${PATH}"; \ fi; \ export PATH; \ if which swiftlint > /dev/null; then \ swiftlint; \ else \ echo "warning: SwiftLint not installed, download from GitHub"; \ fi
- 每行末尾添加
\,告诉Make将多行视为单个命令 - 命令间用
;分隔,保证shell正确解析语句结构
方式2:用bash -c包裹整个脚本
lint: @bash -c 'echo "Checking with SwiftLint"; \ if test -d "/opt/homebrew/bin/"; then \ PATH="/opt/homebrew/bin/:$$PATH"; \ fi; \ export PATH; \ if which swiftlint > /dev/null; then \ swiftlint; \ else \ echo "warning: SwiftLint not installed, download from GitHub"; \ fi'
- 用
bash -c启动单个shell执行完整脚本 - 使用
$$PATH避免Makefile提前解析$PATH变量
内容的提问来源于stack exchange,提问作者Vitalik Kizlov
相关产品推荐
相关产品推荐

