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

如何编写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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 08:15:42