【发布时间】:2013-06-20 13:56:08
【问题描述】:
我正在修改一个包含 6000 多个源文件的大型递归 makefile 项目。所有这些都是透明控制的。由于我不想复制整个源代码树,因此我正在尝试创建一个仅包含修改后的源文件的新项目,因此如果修改后的树中不存在它们,则从原始树中提取源代码。
我已经修改了ModDir 中的makefile,以检查每个文件夹是否在本地存在,如果存在则在该文件夹中执行make。否则它在sourceDir 中执行make。我的问题在于子目录 makefile。
每个子目录 makefile 包含该模块所需的所有源文件的列表。如果文件存在,我需要找到一种在本地构建文件的方法,否则从SourceDir/subdir 构建文件。
即在我的图像中,Dir1 makefile 需要从 ModDir/Dir1/F1 构建 F1,并从 SourceDir/Dir1/F2-F3 构建其他文件。
我尝试使用 VPATH 来告诉 make 在两个位置(当然首先是ModDir)找到源文件,效果很好。但是,由于 make 假设目标文件在 ModDir 中,它无法找到任何在 SourceDir 中构建的目标文件。
我还尝试制定一个预构建规则来使用 bash 修改 make 文件列表,但我不知道这是否可能。
如果源文件存在 (ModDir),我如何使用 make 从一个目录构建,否则从另一个目录构建 (SourceDir)?
【问题讨论】:
-
"[Make 找不到任何内置于
SourceDir的目标文件。"最好不要使用这些文件,因为严格来说,新的 makefile 没有能力构建它们。 -
你不能用符号链接填充
ModDir到丢失的源文件吗?或者甚至制作第三棵树,其中包含指向SourceDir和ModDir中文件的符号链接(视情况而定)? -
是的,我可以使用符号链接,但我不想弄乱 ModDir。现在,我已将每个 ModDir makefile 中的完整路径添加到 SourceDir 中的每个文件。这很好用,但我希望自动化这个过程。
标签: makefile