4

我有很多任务,我必须在添加更多后续编号的 C 程序时不断更新 Makefile。有没有办法通过循环遍历值 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
4

3 回答 3

8

你想要一个后缀规则,而不是一个循环。

于 2008-11-10T01:46:19.367 回答
2

尝试如下规则:

OBJECTS = 1.1.o 1.2.o 1.3.o

all: $(OBJECTS)

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

然后你只需要将额外的对象添加到列表中,一切都很好。

隐式规则可帮助您真正最小化 makefile 中的复制/粘贴周期。

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

于 2008-11-10T01:51:39.717 回答
0

是的; 您可以在 Makefile 中使用 shell 命令,并且 make 本身可以提供您需要的循环。网络上有很多很好的例子。假设您使用的gcc是 GNU make,请在此处尝试:

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

于 2008-11-10T01:44:49.963 回答