如果源文件存在,如何从一个目录进行构建,否则从另一个目录构建?

时间:2013-05-03 15:24:59

标签: makefile

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

Dir Structure

我已经修改了ModDir中的makefile来检查每个文件夹是否存在于本地,如果是,则在该文件夹中执行make。否则它会在sourceDir中执行make。我的问题在于子文件makefile。

每个subdir makefile都包含该模块所需的所有源文件的列表。我需要找到一种在本地构建文件的方法(如果存在),否则从SourceDir/subdir构建文件。

即。在我的图片中,Dir1 makefile需要从F1构建ModDir/Dir1/F1,并从SourceDir/Dir1/F2-F3构建其他文件。

我尝试使用VPATH告诉make在两个位置找到源文件(当然首先是ModDir),这样可以很好地工作。但是,由于make假定目标文件位于ModDir,因此无法找到SourceDir中内置的任何目标文件。

我还尝试制作预构建规则来使用bash修改make文件列表,但我不知道这是否可能。

如果源文件存在(ModDir),如何从一个目录构建make,否则从另一个(SourceDir)构建?

1 个答案:

答案 0 :(得分:1)

最简单的方法是将您的“if ... then ... else”逻辑放在外部bash或批处理中(无论您使用哪种操作系统)脚本并在调用makefile之前交换make s }