我正在修改一个包含 6000 多个源文件的大型递归 makefile 项目。所有这些都是透明控制的。由于我不想复制整个源代码树,因此我正在尝试创建一个仅包含修改后的源文件的新项目,因此如果它们在我修改的树中不存在,则从原始树中提取源代码。
我已经修改了makefileModDir
以检查每个文件夹是否在本地存在,如果存在则在该文件夹中执行make。否则它会在sourceDir
. 我的问题在于子目录生成文件。
每个 subdir makefile 包含该模块所需的所有源文件的列表。如果文件存在,我需要找到一种方法在本地构建文件,否则从SourceDir/subdir
.
即在我的图像中,Dir1
makefile 需要从构建F1
,ModDir/Dir1/F1
并从构建其他文件SourceDir/Dir1/F2-F3
。
我尝试使用 VPATH 来告诉 make 在两个位置(ModDir
当然首先)找到源文件,这很好用。但是,由于 make 假定目标ModDir
文件位于SourceDir
.
我还尝试制定一个预构建规则来使用 bash 修改生成文件列表,但我不知道这是否可能。
如果源文件存在(),我如何使用 make 从一个目录ModDir
构建,否则从另一个(SourceDir
)构建?