如何将所有C文件一次编译到目标文件到同一目录?

时间:2017-09-18 02:07:36

标签: linux makefile

我想一次编译所有的c文件。例如aaa.cbbb.c - >每个独立aaa.obbb.o

我的作品

CFLAGS=-std=c99
SRCS=$(wildcard *.c)

all:$(SRCS)
    gcc -o $@ $^ $(CFLAGS)

make all命令不起作用。

如何一次编译所有c文件?

我改为使用代码,但仍无法正常工作

CFLAGS=-std=c99
SRCS=$(wildcard *.c)
OBJS:=$(patsubst %.c,%.o,%(SRCS))
all:$(OBJS)

2 个答案:

答案 0 :(得分:0)

最简单的方法:将gcc -o ...更改为gcc -c -o ...

更好的方法:列出要构建的目标文件:

OBJS := $(patsubst %.c,%.o,$(SRCS))

然后你所要做的就是:

all: $(OBJS)

答案 1 :(得分:0)

简单而有效的Makefile:

TARGET ?= a.out
SRC_DIRS ?= ./src
INC_DIRS ?= ./include

SRCS := $(shell find $(SRC_DIRS) -name *.cpp -or -name *.c -or -name *.s)
OBJS := $(addsuffix .o,$(basename $(SRCS)))
DEPS := $(OBJS:.o=.d)

LDLIBS :=  -L/usr/lib -lstdc++  -lfoo

INC_FLAGS := $(addprefix -I,$(INC_DIRS))

CPPFLAGS ?= $(INC_FLAGS) -MMD -MP

$(TARGET): $(OBJS)
        $(CC) $(LDFLAGS) $(OBJS) -o $@  $(LDLIBS)

.PHONY: clean
clean:
        $(RM) $(TARGET) $(OBJS) $(DEPS)

-include $(DEPS)