5

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

目录结构

我已经修改了makefileModDir以检查每个文件夹是否在本地存在,如果存在则在该文件夹中执行make。否则它会在sourceDir. 我的问题在于子目录生成文件。

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

即在我的图像中,Dir1makefile 需要从构建F1ModDir/Dir1/F1并从构建其他文件SourceDir/Dir1/F2-F3

我尝试使用 VPATH 来告诉 make 在两个位置(ModDir当然首先)找到源文件,这很好用。但是,由于 make 假定目标ModDir文件位于SourceDir.

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

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

4

1 回答 1

1

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

于 2013-06-20T05:56:08.137 回答