Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何处理递归Makefile调用的依赖关系?_Makefile - Fatal编程技术网

如何处理递归Makefile调用的依赖关系?

如何处理递归Makefile调用的依赖关系?,makefile,Makefile,我有一个C项目,它由相当多的源文件组成,为了理解它们,我把它们放在子目录(带子目录)中。然而,整个项目只产生一个可执行文件 为了构建这个项目,我使用递归Makefiles,其中每个非顶级目录中的Makefile将该目录中生成的所有对象文件链接到一个连接的lib.o文件中(即使用ld-r)。我确实有一个Makefile系统,可以构建这个系统,并且可以很好地实现它,但是它不能支持并行make,我想解决这个问题 问题是,我无法找到一种合适的方法,既可以强制make进入每个目录的子目录,又可以让本地li

我有一个C项目,它由相当多的源文件组成,为了理解它们,我把它们放在子目录(带子目录)中。然而,整个项目只产生一个可执行文件

为了构建这个项目,我使用递归Makefiles,其中每个非顶级目录中的Makefile将该目录中生成的所有对象文件链接到一个连接的
lib.o
文件中(即使用
ld-r
)。我确实有一个Makefile系统,可以构建这个系统,并且可以很好地实现它,但是它不能支持并行
make
,我想解决这个问题

问题是,我无法找到一种合适的方法,既可以强制
make
进入每个目录的子目录,又可以让本地
lib.o
目标依赖于此,而不必被迫重建,即使没有任何更改

这就是它的工作原理,略为简化(不包括
CFLAGS
等等):

这是一个
Makefile.common
,所有其他Makefile都包含该文件。每隔一个Makefile还将定义它们自己的
子目录
对象
。例如,它可能看起来像这样:

SUBDIRS =   dir1 dir2
OBJECTS =   object1.o object2.o

include ../Makefile.common   # Or ../../Makefile.common, &c.
从中可以看出,主要目标实际上是
build
目标,它取决于子目录和
lib.o
。如果我对此调用parallel
make
,它将不知道
lib.o
无法构建,直到
make
已经在子目录上递归运行,并且有时会尝试这样做,从而导致错误。但是,如果我使
lib.o
依赖于子目录,那么
lib.o
总是会在每个目录中的每次调用上进行不必要的重建


有办法解决这个问题吗?我已经为此绞尽脑汁好长一段时间了,却找不到出路。我只使用GNU
make
,所以不要太担心POSIX兼容。

这些情况就是许多人推荐非递归make的原因。有很多单独的make实例都试图更新同一个目标,这不太好。@madcasciient:不过,这听起来不像是我的问题。我没有多个
make
实例更新同一个目标。:)
SUBDIRS =   dir1 dir2
OBJECTS =   object1.o object2.o

include ../Makefile.common   # Or ../../Makefile.common, &c.