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

如何编写Shell脚本执行Makefile?参数触发规则失效问题求助

解决Shell脚本触发Makefile规则的问题

看起来你脚本里有几个关键问题导致无法触发make bonus,咱们一步步来修正:

问题分析

  1. 条件判断语法错误:你写的if [$1 == "bonus"]不符合Shell语法规范——[(这是test命令的别名)的前后必须加空格,而且POSIX标准下字符串比较应该用=而非==(虽然部分Shell支持==,但=兼容性更好)。另外,$1如果为空(比如用户没传参数),不加双引号会直接导致语法报错。
  2. 未实际执行make命令:你的脚本里只是echo了命令,并没有真正调用make bonus,这就是为什么每次都只走默认逻辑的核心原因!
  3. 逻辑顺序错误:原脚本在运行程序前执行make clean,这会把刚生成的可执行文件删掉,直接导致./cub3D无法运行。

修正后的脚本

我调整了语法和逻辑顺序,你可以用这个版本:

#!/bin/bash
# 先清理所有生成文件,确保从头构建
make fclean

# 根据传入参数判断执行哪个Makefile规则
if [ "$1" = "bonus" ]; then
    echo "Building bonus version..."
    make bonus
else
    echo "Building default version..."
    make
fi

# 运行编译好的程序
./cub3D maps/1.cub

# 程序运行完成后清理生成文件(可选,根据你的需求决定是否保留)
make clean

额外优化(可选)

如果你用的是Bash,也可以用更灵活的[[语法(Bash扩展,支持==,处理空参数更友好):

#!/bin/bash
make fclean

if [[ "$1" == "bonus" ]]; then
    make bonus
else
    make
fi

./cub3D maps/1.cub
make clean

最后一步

别忘了给脚本添加执行权限,否则没法直接运行:

chmod +x run.sh

现在运行./run.sh就会执行默认make,运行./run.sh bonus就会触发make bonus规则啦!

内容的提问来源于stack exchange,提问作者DarkSide77

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 16:28:10