You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

执行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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 12:55:09