Мне нужно создать файл make, который будет запускать несколько (аналогично названных) программ подряд. Он также должен быть портативным, поскольку он будет использоваться как в CentOS, так и в Solaris (не GNU). Раньше я никогда не работал с циклами в make-файле. Вот моя попытка ниже. К сожалению, кажется, что это только первая программа.Разработка портативного цикла 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 сделать (как часть Hw задания, это не мой выбор) – audiFanatic
Первое решение работает как шарм, спасибо большое! Теперь, почему мой цикл выполнял только первую программу (с GNU make)? – audiFanatic
@audiFanatic: поскольку GNU делает функцию 'foreach', объединяет все строки foreach'd вместе с пространством между ними (а не, скажем, новой линией или точкой с запятой). Таким образом, первая программа получает список других программ в качестве аргументов командной строки. Для выполнения каждой программы вам нужно использовать «foreach» и «shell», но решение «MadScientist» намного лучше. – rici