已完成Makefile构建,如何添加自动运行escalunador的规则?
在Makefile中添加构建后自动运行程序的规则
好问题!要实现构建完成后自动运行你的escalunador程序,有两种灵活的方案可以选择,下面我会详细说明并给出修改后的Makefile代码:
方案1:添加独立的run目标(推荐)
这种方式保留了原有的构建逻辑,同时新增一个可选的run目标,让你可以按需选择只构建(make)或者构建后直接运行(make run)。
你只需要在原Makefile的末尾添加以下内容:
.PHONY: run run: all ./escalunador
关键说明:
.PHONY: run:声明run是一个伪目标,避免当前目录下如果存在名为run的文件时,Make会误以为目标已经完成而跳过执行步骤。run: all:表示运行目标依赖于all目标,也就是先完成所有构建工作,再执行运行命令。- 缩进的
./escalunador:这是实际运行程序的命令,注意必须用Tab键缩进(Makefile的语法硬性要求)。
如果需要给程序传递命令行参数,可以修改成这样:
.PHONY: run run: all ./escalunador $(ARGS)
使用时只需这样传参:make run ARGS="参数1 参数2"
方案2:修改all目标,默认构建后自动运行
如果你希望每次执行make时都自动运行程序,可以直接修改原有的all目标,让它依赖于运行步骤。
修改后的完整Makefile如下:
CC = gcc CFLAGS = -g -Wall -std=c99 .PHONY: all run all: run run: escalunador ./escalunador escalunador: escalunador.o usables.o queue.o linkedlist.o $(CC) $(CFLAGS) -o escalunador escalunador.o usables.o queue.o linkedlist.o escalunador.o: escalunador.c usables.h queue.h linkedlist.h $(CC) $(CFLAGS) -c escalunador.c usables.o: usables.c queue.h linkedlist.h $(CC) $(CFLAGS) -c usables.c queue.o: queue.c linkedlist.h $(CC) $(CFLAGS) -c queue.c linkedlist.o: linkedlist.c linkedlist.h $(CC) $(CFLAGS) -c linkedlist.c clean: $(RM) escalunador *.p *~
关键说明:
- 这里把
all的依赖改成了run,而run依赖于escalunador目标(你的可执行程序),所以执行make时会先完成构建流程,再自动运行程序。 - 添加
.PHONY: all run来声明伪目标,确保逻辑不会因为同名文件而出现异常。
两种方案都能满足你的需求,推荐第一种,因为它更灵活,能兼顾「只构建」和「构建后运行」两种场景。
内容的提问来源于stack exchange,提问作者Daniel Serrano
相关产品推荐
相关产品推荐

