首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用vpath查找生成的文件

使用vpath查找生成的文件
EN

Stack Overflow用户
提问于 2019-11-06 10:34:08
回答 1查看 132关注 0票数 0

我正在编写一个Makefile,它将*.c编译成一个*.o,然后将它移动到obj/。但是,当我试图链接main中的所有main文件时,我会得到一个错误,好像没有找到生成的文件一样。我试着在代码前面加上正确的路径,但它还是找不到。有谁知道我需要修改什么代码才能找到*.o文件吗?这是我的Makefile

代码语言:javascript
复制
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规则中的最后两行,代码工作得很好,但我不能这样做。这是执行时的错误:

代码语言:javascript
复制
---- 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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-11-06 12:15:57

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

代码语言:javascript
复制
obj/%.o: %.c 
    [ -d obj ] || mkdir -p obj
    gcc -o $@ $<
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58728118

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档