我正在修改一个包含6000多个源文件的巨大递归makefile项目。所有这些都是明确控制的。由于我不想复制整个源代码树,我正在尝试创建一个仅包含已修改源文件的新项目,因此如果源代码在我修改后的树中不存在,则从原始树中提取源代码。
我已经修改了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
)构建?
答案 0 :(得分:1)
最简单的方法是将您的“if ... then ... else”逻辑放在外部bash或批处理中(无论您使用哪种操作系统)脚本并在调用makefile
之前交换make
s }