如何通过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
相关产品推荐
相关产品推荐

