如何使用GNU make将多个不相关的源文件编译成多个不相关的目标文件?

时间:2014-03-30 17:42:06

标签: c makefile

我一直在学习gnu make和Makefiles。当我使用许多依赖对象,头文件和源文件时,Makefile使我的生活更轻松。我听说make可以用来做各种自动化 - 魔术所以我很好奇知道我是否可以使用它将不相关的主要功能的无关文件编译成不相关的目标文件,并且都在同一个目录中。

这是一些应该做我想做的代码:

CC=gcc
CFLAGS=-g -Wall -std=gnu99 -DNDEBUG
all:
    $(CC) $(CFLAGS) file1.c -o file1
    $(CC) $(CFLAGS) file2.c -o file2
    $(CC) $(CFLAGS) file3.c -o file3
    $(CC) $(CFLAGS) file4.c -o file4
    etc...

我知道如何制作一个* .c文件列表,然后完成相应的目标文件:

TARGET=$(wildcat *.c)
OBJECTS=$(patsubst %.c,%,$(SOURCES))

但这只给了我一份文件清单。如何处理该列表中的单个文件,以便我一次可以编译一个文件?

3 个答案:

答案 0 :(得分:1)

所有人都想通了,谢谢大家的意见。这是一个简单的解决方案,完全符合我的要求:

SOURCES=$(wildcard *.c)
OBJECTS=$(patsubst %.c,%,$(SOURCES))
all: $(OBJECTS)

答案 1 :(得分:0)

Make是一个所谓的基于规则的专家系统。您可以为其确定依赖关系以及如何为每个步骤执行操作的规则(已经有许多可以覆盖预定义的通用模式),给它一个目标,并确定如何到达那里以及所有(重新)执行的内容。

没有人阻止你给make一个明确的目标,而不是让它做默认的目标(通常是makefile中的第一个)。

以这种方式覆盖依赖项:

all: file1 file2 file3

答案 2 :(得分:0)

实际上,从相应的* .c文件制作* .o文件的规则是c文件中make:call $(CC)-c的内置规则集的一部分。也就是说,对于该任务,您甚至不需要Makefile,更不用说列出其中的单个来源。只需说出" make whatevername.o"。