我正在修改一个包含6000多个源文件的巨大递归makefile项目.所有这些都是明确控制的.由于我不想复制整个源代码树,我正在尝试创建一个仅包含已修改源文件的新项目,因此如果源树在修改后的树中不存在,则从原始树中提取源代码.

我已经修改了makefile ModDir以检查每个文件夹是否存在于本地,如果是,则在该文件夹中执行make.否则它执行make sourceDir.我的问题在于子文件makefile.
每个subdir makefile都包含该模块所需的所有源文件的列表.我需要找到一种在本地构建文件的方法,如果它存在,否则从中构建文件SourceDir/subdir.
即在我的图像中,Dir1makefile需要构建,并F1从中ModDir/Dir1/F1构建其他文件SourceDir/Dir1/F2-F3.
我尝试使用VPATH告诉make在两个位置(ModDir当然首先)找到源文件,它们工作得很漂亮.但是,由于make假定目标文件在其中ModDir,因此无法找到内置的任何目标文件SourceDir.
我还尝试制作预构建规则来使用bash修改make文件列表,但我不知道是否可能.
如果源文件存在(ModDir),如何从一个目录构建make ,否则从另一个(SourceDir)构建?