aud*_*tic 1 c loops makefile gnu-make
我需要设计一个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)
Run Code Online (Sandbox Code Playgroud)
这是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
Run Code Online (Sandbox Code Playgroud)
当你说Solaris时,你的意思是你在使用Solaris make
吗?或者您在Solaris上使用GNU make?
你为什么要尝试使用make函数?如果您想要完全可移植,则必须使用shell进行循环:
run: $(PROGS)
for p in $(PROGS); do ./$$p; done
Run Code Online (Sandbox Code Playgroud)
如果您在Solaris上使用GNU make,则可以使用GNU make模式规则以更"仿制"的方式执行此操作:
run: $(PROGS:%=run-%)
run-%: %
./$<
.PHONY: run $(PROGS:%=run-%)
Run Code Online (Sandbox Code Playgroud)