0
我有大量的小C程序(所有单个.c文件),我想将它们全部构建到单独的可执行文件中。也就是说,prog-01.c
,prog-02.c
等应该单独构建,结果应该是该程序的单个可执行文件。在makefile中批量构建源代码
我在makefiles中使用通配符相对比较新,我很感谢一些帮助。这是我到目前为止已经完成:
CC = gcc
CFLAGS = -g -Wall -Werror
SRCS:=$(wildcard *.c)
OBJS:=$(SRC:.c=.bin)
all-gcc: $(SRCS)
$(CC) $(CFLAGS) $(SRCS) -o $(OBJS)
run-%-gcc: prog-%-gcc
@./$(<)
prog-%-gcc: prog-%.c
$(CC) $(CFLAGS) $< -o [email protected]
clean:
@rm *.o
哇,这很好!你能详细解释一下这里发生了什么吗? – audiFanatic 2014-10-17 04:48:41
你知道通配符是如何工作的,生成一个以'.c'结尾的文件名列表。下一个分配会创建一个名称列表,其中'.c'后缀被一个空字符串替代,有效地删除'.c'。这些被认为是制作的节目。当然,'make'知道如何从一个C源文件创建一个程序。当所有程序都是最新的时候,所有的目标都是最新的。因此,标准的内置规则负责所有的艰苦工作。 OBJS宏包含目标文件名,假设你在Unix上。 'clean'目标删除程序和目标文件。 – 2014-10-17 05:31:59
啊,这就是我没有得到的;我没有意识到make可以自动构建没有明确规则的东西。在那种情况下,我将如何修改这个以使用明确的规则?我需要制定另一条规则来同时运行所有这些规则?使用'./$(PROGS)'只运行第一个程序,然后将其他参数作为参数。 – audiFanatic 2014-10-17 14:46:34