Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 如何将所有C文件一次编译为同一目录下的对象文件?_Linux_Makefile - Fatal编程技术网

Linux 如何将所有C文件一次编译为同一目录下的对象文件?

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:$(

我想一次编译所有的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:$(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))