2011-03-22 52 views
1

我有2只显示目录A和A I内有B.这样做有什么问题(考虑并行)?

生成文件在目录中的样子:

include rules.mk   //defines common rules for generating *.o from *.cpp *.c 

OBJECTS = test.o \ 
      B\test1.o \ 
      B\test2.o 

test.lo : $(OBJECTS) 
    $(LD) $(LD_OPTS) -o [email protected] $^ 
    $(CREATE_CXX_SO) 

如B没有生成文件在其内定义。

是否有必要在子目录中使用Makefiles?对于串行,这似乎并不构成问题,但在执行并行时,有时甚至在编译B/test1.oB/test2.o之前$(LD)尝试使conn.lo

如果我在上面做的是错的,我有什么选择?

+1

这是(一部分)你正在使用的实际生成文件,还是你写这看起来像你正在使用的实际生成文件?我在问,因为你提到了目标'conn.lo',但是在你发布的代码中没有看到。你展示的短片段对我来说看起来很好。检查你的实际生成文件是否与你在这里给我们的作品一样。 – eriktous 2011-03-22 13:58:15

回答

0

我读了一篇关于递归使用make的优秀文章......你猜对了,Recursive Make Considered Harmful。本文详细介绍了令人不快的常见递归使用make的问题,以及如何构建您的Makefile,以便它可以更好并且更可靠地平行运行。

或者,您可以使用出色的SCons

+0

感谢您的回复,但如果您在这里注意到,那里没有递归调用。我想知道,如果这样做要求每个目录有一个makefile,如果没有这样做,副作用是什么。 – 2011-03-22 06:51:36

+0

不,make不需要每个目录有一个Makefile。实际上,正如那篇文章所描述的那样,最好有*一个* Makefile,并将子目录中的文件包含为主Makefile的一部分。 – 2011-03-22 07:17:28