如何编写Makefile实现带参数让main函数重复执行指定次数
编写Makefile实现指定次数执行main程序
实现思路
要实现输入make main -P<Int>时重复执行main程序,核心要完成两件事:先编译C源文件生成可执行程序,再捕获-P<Int>参数中的执行次数,通过shell循环重复运行程序。
完整Makefile代码
# 提取-P参数后的执行次数数字 RUN_COUNT := $(shell echo $(filter -P%, $(MAKECMDGOALS)) | sed 's/-P//') # 声明伪目标,避免与同名文件冲突 .PHONY: main -P% # 编译main程序的规则(假设源文件为main.c) main: main.c gcc -o main main.c # 匹配所有-P开头的目标,执行指定次数的main程序 -P%: main @if [ -n "$(RUN_COUNT)" ] && [ "$(RUN_COUNT)" -gt 0 ] 2>/dev/null; then \ for i in $$(seq 1 $(RUN_COUNT)); do \ echo "=== 第$$i次执行 ==="; \ ./main; \ done; \ else \ echo "错误:-P后必须跟正整数,例如 make main -P5"; \ fi
代码说明
- 参数捕获:
RUN_COUNT通过filter筛选命令行中-P开头的目标,再用sed剔除-P前缀,得到具体执行次数; - 伪目标声明:
.PHONY标记main和所有-P%模式的目标为伪目标,防止Make将其误认为是需要生成的文件; - 编译规则:执行
make main时,会自动编译main.c生成可执行文件; - 循环执行:
-P%模式规则会先确保main已编译完成,再通过shell循环执行指定次数的程序,同时加入参数合法性检查,避免非正整数输入导致错误。
使用示例
- 编译并执行main程序5次:
make main -P5 - 直接执行已编译好的main程序3次:
make -P3
注意事项
你提供的main函数需要补全为完整的C程序,比如:
#include <stdio.h> int main() { // 这里编写你的业务逻辑 printf("程序执行中...\n"); return 0; }
内容的提问来源于stack exchange,提问作者Leon Uzkawski
相关产品推荐
相关产品推荐

