我需要设计一个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-%)

09-10 00:15
查看更多