我正在修改一个包含6000个源文件的巨大递归makefile项目 . 所有这些都是明确控制的 . 由于我不想复制整个源代码树,我正在尝试创建一个仅包含已修改源文件的新项目,因此如果源树在修改后的树中不存在,则从原始树中提取源代码 .
我已经修改了 ModDir
中的makefile来检查每个文件夹是否存在于本地,如果存在则在该文件夹中执行make . 否则它在 sourceDir
中执行make . 我的问题在于子文件makefile .
每个subdir makefile都包含该模块所需的所有源文件的列表 . 我需要找到一种在本地构建文件的方法,如果它存在,否则从 SourceDir/subdir
构建文件 .
即在我的图像中, Dir1
makefile需要从 ModDir/Dir1/F1
构建 F1
,并从 SourceDir/Dir1/F2-F3
构建其他文件 .
我试图使用VPATH来告诉make在两个位置找到源文件(当然是第一个_1189820),它工作得非常好 . 但是,由于make假定目标文件位于 ModDir
中,因此无法找到 SourceDir
中内置的任何目标文件 .
我还尝试制作预构建规则来使用bash修改make文件列表,但我不知道是否可能 .
如果源文件存在( ModDir
),如何从一个目录构建make,否则从另一个目录( SourceDir
)构建?
1 回答
最简单的方法是将"if ... then ... else"逻辑放在外部bash或批处理中(无论你使用哪种操作系统)脚本并在调用
make
之前交换makefile