Петли в Makefile - PullRequest
       19

Петли в Makefile

4 голосов
/ 10 ноября 2008

У меня много заданий, где я должен постоянно обновлять Makefile, когда я добавляю больше программ на C, пронумерованных впоследствии. Есть ли способ сделать это с помощью цикла, который перебирает значения 1.1, 1.2, 1.3 и т. Д .?

all: 1.1 1.2 1.3 1.4 1.5 1.6 1.7. 1.8 1.9

1.1: 1.1.o
    gcc -o 1.1 $(FLAGS) 1.1.o
1.1.o: 1.1.c
    gcc -c $(FLAGS) 1.1.c

1.2: 1.2.o
    gcc -o 1.2 $(FLAGS) 1.2.o
1.2.o: 1.2.c
    gcc -c $(FLAGS) 1.2.c

1.3: 1.3.o
    gcc -o 1.3 $(FLAGS) 1.3.o
1.3.o: 1.3.c
    gcc -c $(FLAGS) 1.3.c

1.4: 1.4.o
    gcc -o 1.4 $(FLAGS) 1.4.o
1.4.o: 1.4.c
    gcc -c $(FLAGS) 1.4.c

1.5: 1.5.o
    gcc -o 1.5 $(FLAGS) 1.5.o
1.5.o: 1.5.c
    gcc -c $(FLAGS) 1.5.c

1.6: 1.6.o
    gcc -o 1.6 $(FLAGS) 1.6.o
1.6.o: 1.6.c
    gcc -c $(FLAGS) 1.6.c

1.7: 1.7.o
    gcc -o 1.7 $(FLAGS) 1.7.o
1.7.o: 1.7.c
    gcc -c $(FLAGS) 1.7.c

1.8: 1.8.o
    gcc -o 1.8 $(FLAGS) 1.8.o
1.8.o: 1.8.c
    gcc -c $(FLAGS) 1.8.c

1.9: 1.9.o
    gcc -o 1.9 $(FLAGS) 1.9.o
1.9.o: 1.9.c
    gcc -c $(FLAGS) 1.9.c

clean:
    rm -f *.o
    rm -f 1.1 1.2 1.3 1.4 1.5 1.6 1.7. 1.8 1.9

Ответы [ 3 ]

8 голосов
/ 10 ноября 2008

Вы хотите суффиксное правило , а не цикл.

2 голосов
/ 10 ноября 2008

Попробуйте правило вроде:

OBJECTS = 1.1.o 1.2.o 1.3.o

all: $(OBJECTS)

%.o: %.c
    gcc $(FLAGS) %< -o $*

Тогда вам просто нужно добавить дополнительный объект в список, и все хорошо.

Неявные правила помогают вам действительно минимизировать цикл копирования / вставки в вашем make-файле.

http://www.gnu.org/software/autoconf/manual/make/Implicit-Rules.html#Implicit-Rules

0 голосов
/ 10 ноября 2008

Да; Вы можете использовать команды оболочки в Makefile, и make сам может предложить цикл, который вам нужен. В сети есть масса хороших примеров; исходя из того, что вы используете gcc, что вы также используете GNU make, попробуйте здесь:

http://www.gnu.org/software/make/manual/make.html#Foreach-Function

...