我需要设计一个make文件,它将连续运行多个(类似名称的)程序它还需要是可移植的,因为它将用于CentOS和Solaris(非GNU)系统我以前从未真正在makefile中处理过循环下面是我的尝试不幸的是,它似乎只执行第一个程序。
CC = gcc
CFLAGS = -g -Wall #-Werror
SRCS := $(wildcard *.c)
PROGS := $(SRCS:.c=)
OBJS := $(SRCS:.c=.o)
all: $(PROGS)
run: $(PROGS)
$(foreach prog, $(PROGS), ./$(prog))
clean: $(PROGS)
rm $(PROGS)
这是从终端运行
make run
的结果./prog-14 ./prog-17 ./prog-20 ./prog-13 ./prog-18 ./prog-06 ./prog-07 ./prog-04 ./prog-19 ./prog-11 ./prog-03 ./prog-08 ./prog-12 ./prog-16 ./prog-21 ./prog-01 ./prog-10 ./prog-15 ./prog-05 ./prog-09 ./prog-02
in program 14
最佳答案
当你说Solaris时,你是说你在使用Solarismake
?或者在Solaris上使用GNU make?
为什么要使用make函数?如果要完全便携,则必须使用shell进行循环:
run: $(PROGS)
for p in $(PROGS); do ./$$p; done
如果在Solaris上使用GNU make,则可以使用gnumake模式规则以更“类似”的方式执行此操作:
run: $(PROGS:%=run-%)
run-%: %
./$<
.PHONY: run $(PROGS:%=run-%)