gpt4 book ai didi

c - Makefile : How to put all the . o 目录中的文件

转载 作者:行者123 更新时间:2023-11-30 14:43:51 26 4
gpt4 key购买 nike

我想将所有 .o 文件放在不同的目录中。
他可以创建所有 .o 文件,但他可以创建 .exe 文件
我的生成文件:

CC = gcc
SRC = $(wildcard *.c)
OBJ = $(SRC:.c=.o)
EXEC = exe
CFLAGS = -Wall -pedantic -std=c11 -g


all : $(EXEC)
%.o : %.c
$(CC) -o prog/$@ -c $< $(CFLAGS)
$(EXEC) : $(OBJ)
$(CC) -o $@ prog/$^ $(CFLAGS)

clean : rm -rf *.o
mrproper : clean rm -rf $(EXEC)

shell(Ubuntu)中有结果:

gcc -o prog/a.o -c a.c -Wall -pedantic -std=c11 -g
gcc -o prog/b.o -c b.c -Wall -pedantic -std=c11 -g
gcc -o prog/main.o -c main.c -Wall -pedantic -std=c11 -g
gcc -o exe prog/a.o b.o main.o -Wall -pedantic -std=c11 -g
gcc: error: b.o: No file or directory
gcc: error: main.o: No file or directory
Makefile:13: recipe for target 'exe' failed
make: * [exe] Error 1

PS : a.c : 打印 A , b.c : 打印 B 等 main.c 使用 a.c 和 b.c

最佳答案

我看到两个问题:

  1. 您的 %.o 规则实际上不会创建 %.o 文件。
  2. prog/$^ 扩展为 prog/a.o b.o main.o 因为 $(OBJ)a.o b.o main。 Ø

我会这样做:

不要写 OBJ = $(SRC:.c=.o),而是写

OBJ = $(SRC:%.c=prog/%.o)

目标文件的规则就变成了

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

可以使用以下命令创建可执行文件

$(EXEC) : $(OBJ)
$(CC) -o $@ $^ $(CFLAGS)

最后,出于理智原因,您的清理规则可能应该是

clean :
rm -rf prog/*.o
mrproper : clean
rm -rf $(EXEC)

关于c - Makefile : How to put all the . o 目录中的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53697862/

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