gpt4 book ai didi

makefile - 如何从特定的目标文件制作特定的二进制文件?

转载 作者:行者123 更新时间:2023-12-05 04:18:23 24 4
gpt4 key购买 nike

这是我的 makefile,我在 obj/目录中有目标文件,我需要将它们编译成二进制文件在 bin/文件夹中,但不知何故它无法正常工作,有什么想法吗?

SOURCES= $(wildcard *.c)
OBJECTS:= $(patsubst %.c, %.o, $(SOURCES))
OBJECTS:= $(addprefix obj/,$(OBJECTS))
NAMES:= $(patsubst %.c, %, $(SOURCES))
NAMES:= $(addprefix bin/,$(NAMES))
CC=gcc
CFLAGS= -Wall -c -o
DIRS = bin obj

all: $(DIRS) $(NAMES)

$(NAMES): $(OBJECTS)
$(CC) -o $@ $<

obj/%.o: %.c
$(CC) $(CFLAGS) $@ $<

$(DIRS):
mkdir -p $@

clean:
rm -rf $(DIRS)

实际输出:

mkdir -p bin
mkdir -p obj
gcc -Wall -c -o obj/task1.o task1.c
gcc -Wall -c -o obj/task2.o task2.c
gcc -Wall -c -o obj/task3.o task3.c
gcc -o bin/task1 obj/task1.o
gcc -o bin/task2 obj/task1.o
gcc -o bin/task3 obj/task1.o

预期输出:

mkdir -p bin
mkdir -p obj
gcc -Wall -c -o obj/task1.o task1.c
gcc -Wall -c -o obj/task2.o task2.c
gcc -Wall -c -o obj/task3.o task3.c
gcc -o bin/task1 obj/task1.o
gcc -o bin/task2 obj/task2.o
gcc -o bin/task3 obj/task3.o

最佳答案

在这条规则中:

$(NAMES): $(OBJECTS)
$(CC) -o $@ $<

每个 可执行文件都依赖于所有 对象。自 $<只捕获第一个先决条件,你看到的是obj/task1.o .

这样做:

bin/%: obj/%.o
$(CC) -o $@ $<

或者这样:

$(NAMES): bin/% : obj/%.o
$(CC) -o $@ $<

关于makefile - 如何从特定的目标文件制作特定的二进制文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15873011/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com