Linux 如何将所有C文件一次编译为同一目录下的对象文件?
我想一次编译所有的c文件。ex)Linux 如何将所有C文件一次编译为同一目录下的对象文件?,linux,makefile,Linux,Makefile,我想一次编译所有的c文件。ex)aaa.c,bbb.c->aaa.o,bbb.o每个独立的 我的品牌 CFLAGS=-std=c99 SRCS=$(wildcard *.c) all:$(SRCS) gcc -o $@ $^ $(CFLAGS) 但是makeall命令不起作用 如何一次编译所有c文件? 我改为根据代码,但仍然不工作 CFLAGS=-std=c99 SRCS=$(wildcard *.c) OBJS:=$(patsubst %.c,%.o,%(SRCS)) all:$(
aaa.c
,bbb.c
->aaa.o
,bbb.o
每个独立的
我的品牌
CFLAGS=-std=c99
SRCS=$(wildcard *.c)
all:$(SRCS)
gcc -o $@ $^ $(CFLAGS)
但是makeall
命令不起作用
如何一次编译所有c文件?
我改为根据代码,但仍然不工作
CFLAGS=-std=c99
SRCS=$(wildcard *.c)
OBJS:=$(patsubst %.c,%.o,%(SRCS))
all:$(OBJS)
最简单的方法:将
gcc-o…
更改为gcc-c-o…
更好的方法:列出要生成的对象文件:
OBJS := $(patsubst %.c,%.o,$(SRCS))
然后你要做的就是:
all: $(OBJS)
简单且有效的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)
我将
all
更改为all:$(OBJS)
并在SRCS
下追加OBJS
,但仍会出现错误。@DWAhn:您在OBJS:=…
行中输入了一个错误。是的,我遵循了您的OBJS
line@DWAhn字体你打错了。我的线路是$(SRCS))
;您转录了…%(SRCS))
。