2015-01-06 75 views
0

我的目录结构作为的src/OBJ /包括我已经建立2 /斌/的.cpp文件中SRC文件夹和使用既CPP文件头文件包括文件夹。我想创建OBJ文件和二进制目标文件中仓下面文件夹:对象未找到错误使

vpath %.cpp src 

    vpath %.h include 

    vpath %.o obj 

    all : main.o factorial.o run 


    run : main.o factorial.o 
     cc $^ -o bin/[email protected] -lstdc++ 

    main.o : main.cpp functions.h 
     cc -c $< $(inc) -o obj/[email protected] -lstdc++ 

factorial.o : factorial.cpp functions.h 
     cc -c $< $(inc) -o obj/[email protected] -lstdc++ 

clean : 
     rm -rf bin/* obj/* 

并同时使第一时间之后是输出:

[email protected] make-tut]$ make 

    cc -c src/main.cpp -I include -o obj/main.o -lstdc++ 

    cc -c src/factorial.cpp -I include -o obj/factorial.o -lstdc++ 

    cc main.o factorial.o -o bin/run -lstdc++ 

    cc: main.o: No such file or directory 

    cc: factorial.o: No such file or directory 

    make: *** [run] Error 1 

[email protected] make-tut]$ 

如果我运行再次出现没有错误:

[[email protected] make-tut]$ make 
cc obj/main.o obj/factorial.o -o bin/run -lstdc++ 

问题是什么?

+0

**爵士!然后像我必须写run:obj/main.o obj/factorial.o; cc $^-o bin/$ @ -lstdC++;并删除行vpath%.o obj ** –

回答

1

makefile的第一条规则。目标需要创建一个文件,其中包含目标名称的确切的

因此,您在目录中生成文件但在目标名称中不包含该目录的所有规则(例如main.o : main.cpp functions.h ; cc -c $< $(inc) -o obj/[email protected] -lstdc++)都不正确。

由于make认为它创建了factorial.omain.o,所以导致第一次运行时出现问题,但它实际上创建了obj/factorial.oobj/main.o

第二次运行你写的vpath指令是在游戏中,并正确地发现在裸factorial.omain.oobj/factorial.oobj/main.o对象。

+0

先生!!!!!解决办法是什么 ? –

+0

修复你的makefile。你需要'obj/factorial.o'等目标和先决条件。那么你也不需要'vpath%.o obj'行。 –

+0

@Ethan Reisner **爵士!还有一个帮助。请描述一下我可以使用vpath的实时情况,下次我可以参考它。请先生!!!! ** –

相关问题