gpt4 book ai didi

c - C 中的 Makefile - 没有创建目标的规则

转载 作者:太空宇宙 更新时间:2023-11-04 06:19:43 24 4
gpt4 key购买 nike

我正在尝试制作一个 Makefile,即使我可以制作一个简单的 Makefile,但当我需要对不同文件夹中的文件进行排序时我无法让它工作,我需要的是/translator 文件夹:Makefile,包含所有 .c 和 .h 文件的 src 文件夹,包含要翻译的文件的 files 文件夹,以及包含所有 .o 文件和可执行文件的 bin 文件夹。

这是我制作的makefile:

CC = gcc
CFLAGS = -Wall -Werror -Wextra -pedantic -std=c99 -g
OBJECTS = word.o pair.o list.o dict.o set.o

translate : $(OBJECTS)
mkdir ./files
mkdir ./bin
cd ./src; $(CC) $(CFLAGS) -o translate $(OBJECTS) main.c; mv *.o ../bin; mv translate ../bin

word.o: word.c word.h
cd ./src; $(CC) $(CFLAGS) -c word.c -o word.o

pair.o: pair.c pair.h word.h
cd ./src; $(CC) $(CFLAGS) -c pair.c -o pair.o

list.o: list.c list.h word.h pair.h
cd ./src; $(CC) $(CFLAGS) -c list.c -o list.o

dict.o: dict.c dict.h word.h list.h
cd ./src; $(CC) $(CFLAGS) -c dict.c -o dict.o

set.o: set.c set.h word.h list.h
cd ./src; $(CC) $(CFLAGS) -c set.c -o set.o

.PHONY : clean

clean :
$(RM) ./bin/*.*
rmdir ./bin

但是只要我输入make,终端就会显示:

make: *** No rule to make target `word.c', needed by `word.o'.  Stop.

我以前用这种方法为 Java 制作了一个 Makefile 并且它可以工作,并且可以肯定的是,在 src 文件夹中有一个文件 word.h 和 word.c,那么为什么找不到它呢?

最佳答案

你告诉 make translate(在当前目录中)依赖于 word.o 等(在当前目录中),它依赖于 word。 cword.h(在当前目录中)。

there is, for sure, a file word.h and word.c inside the src folder, so why is it not finding it?

因为你没有告诉它在 src 中查找。

你可以这样做:

OBJECTS = word.o pair.o list.o dict.o set.o main.o
# main.o is also an object file

bin/translate: $(addprefix bin/,$(OBJECTS))
$(CC) $(CFLAGS) $+ -o $@

bin/word.o: src/word.c src/word.h
$(CC) $(CFLAGS) -c $< -o $@

# ... repeat for all source files

(另见 https://www.gnu.org/software/make/manual/html_node/File-Name-Functions.htmlhttps://www.gnu.org/software/make/manual/html_node/Automatic-Variables.html。)

关于c - C 中的 Makefile - 没有创建目标的规则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37891553/

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