我需要设计一个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
答案 0 :(得分:5)
当您说Solaris时,您是说您正在使用Solaris make
吗?或者您在Solaris上使用GNU make吗?
为什么要尝试使用make功能?如果你想要完全可移植,你必须使用shell进行循环:
run: $(PROGS)
for p in $(PROGS); do ./$$p; done
如果您在Solaris上使用GNU make,您可以使用GNU make模式规则在更多" make-like"方式:
run: $(PROGS:%=run-%)
run-%: %
./$<
.PHONY: run $(PROGS:%=run-%)