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

如何通过Shell脚本向C语言程序传递运行时参数(结合Makefile编译)

没问题,我来一步步帮你实现这个需求——用Makefile编译你的C代码,再通过Shell脚本把命令行参数传递给编译后的程序!

1. 编写Makefile完成编译

首先写一个简单的Makefile,它会帮你自动编译C代码。假设你的C文件名叫main.c(如果不是,替换成你的实际文件名即可):

# 定义编译器和基础编译选项
CC = gcc
CFLAGS = -Wall -Wextra

# 默认目标:生成可执行文件my_program
all: my_program

# 编译规则:从main.c生成可执行文件
my_program: main.c
	$(CC) $(CFLAGS) -o $@ $^

# 清理编译产物的目标
clean:
	rm -f my_program

简单解释下:

  • CC指定用gcc编译器,CFLAGS添加了基础警告选项,能帮你提前发现代码里的小问题
  • 执行make命令时,会自动触发all目标,生成名为my_program的可执行文件
  • 执行make clean可以删掉编译出来的my_program,方便重新编译
2. 编写Shell脚本传递参数

接下来写一个Shell脚本(比如命名为run_program.sh),它会接收你在命令行输入的参数,再传递给编译好的C程序:

#!/bin/bash

# 先检查可执行文件是否存在,不存在就自动调用make编译
if [ ! -f ./my_program ]; then
    echo "未找到可执行文件,自动执行编译..."
    make
fi

# 把脚本收到的所有命令行参数原封不动传递给C程序
./my_program "$@"

关键细节说明:

  • #!/bin/bash指定用bash解释器运行脚本
  • 脚本会自动检查编译产物是否存在,省去你手动先执行make的步骤
  • "$@"会完整保留你传给脚本的所有参数,完美匹配你的main函数对argv的处理逻辑
3. 给脚本加权限并测试

先给Shell脚本添加执行权限:

chmod +x run_program.sh

现在就可以测试啦:

  • 传递ABC参数:./run_program.sh ABC
  • 传递XYZ参数:./run_program.sh XYZ

你的C程序里的main函数会正确接收到argv[1]的值,执行对应的分支逻辑~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 06:57:39