gpt4 book ai didi

c - 使用vpath查找生成的文件

转载 作者:行者123 更新时间:2023-11-30 16:11:03 25 4
gpt4 key购买 nike

我正在尝试编写一个 Makefile,将 *.c 编译为 *.o,然后将其移动到 obj/ 。但是,当我尝试链接 main 中的所有 *.o 文件时,我收到错误,就好像未找到生成的文件一样。我尝试在代码前添加正确的路径,但无论如何都找不到它。有谁知道我需要对代码进行哪些更改才能找到 *.o 文件。这是我的 Makefile:

EXEC = main
CFLAGS = -c -Wall -g -I include -std=c99
OBJECTS = main.o jeu.o grille.o io.o
EXEC = main
DOCGEN = doxygen

vpath %.c src/
vpath %.h include/
vpath %.o obj/
vpath main bin/

all: main

main: $(OBJECTS)
@echo "\n==== Linking $@ $^ ===="
@gcc -o $@ $(OBJECTS)
@mkdir -p bin
@mv $@ bin/
#@mkdir -p obj
#@mv *.o obj/

main.o: io.h jeu.h

io.o: io.h

jeu.o: jeu.h

%.o: %.c grille.h
@echo "\n---- Rule " $@ $< "----"
@gcc $(CFLAGS) $<
@mkdir -p obj
@mv $@ obj/


doc:
@mkdir -p doc
@$(DOCGEN)

clean:
@rm -rf doc/
@rm -rf bin/
@rm -rf obj/
@rm -f *.xz

欢迎任何建议。我读到不建议使用 vpath 来查找生成的文件。但这是一项作业,我必须这样使用它。如果我取消注释这两行并注释 %.o 规则中的最后两行,则代码工作得很好,但我不能这样做。这是执行时的错误:

---- Rule  main.o src/main.c ----

---- Rule jeu.o src/jeu.c ----

---- Rule grille.o src/grille.c ----

---- Rule io.o src/io.c ----

==== Linking main main.o jeu.o grille.o io.o ====
gcc: error: main.o: No such file or directory
gcc: error: jeu.o: No such file or directory
gcc: error: grille.o: No such file or directory
gcc: error: io.o: No such file or directory
gcc: fatal error: no input files
compilation terminated.
Makefile:15: recipe for target 'main' failed
make: *** [main] Error 1

最佳答案

考虑更改编译规则以引用对象文件夹:

obj/%.o: %.c 
[ -d obj ] || mkdir -p obj
gcc -o $@ $<

关于c - 使用vpath查找生成的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58728118/

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