设计一个可移植的makefile循环

时间:2014-10-18 21:19:27

标签: 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)

以下是从终端

运行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

1 个答案:

答案 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-%)