我想知道是否可以将makefile目标的依赖项作为参数传递。如果可能的话,该怎么做。
例如,假设我有一个基于多个依赖关系构建的应用程序
target_full : dep1.o dep2.o dep3.o
commands
dep1.o : file1 file2
commands
dep2.o : file3 file4
commands
dep3.o : file5 file6
commands
我希望能够将已经编译的依赖项作为参数传递。
因此,如果我运行
make all
,它将从文件生成dep1.o dep2.o dep3.o,但是如果我运行make all dep1-file=myDep.o
,它将仅生成dep2.o和dep3.o,并使用给定的依赖性,而无需从file1和file2重新编译dep1.o。实际上,我根本不希望第一个依赖目标被调用
我想像的东西
ifndef(dep1-file)
dep1=dep1.o
else
dep1=${dep1-file}
endif
target_full : ${dep1} dep2.o dep3.o
commands
${dep1} : file1 file2
commands
dep2.o : file3 file4
commands
dep3.o : file5 file6
commands
但是,请继续从文件1和文件2编译dep1.o。也许是因为修改日期,但我也希望不要将其计入在内,因为我不在乎file1和file2是否比我的自定义依赖项更新。
编辑:我应该明确指出我有一个可行的解决方案,但是它确实很难看,所以我对它不完全满意,我认为存在一种更好的方法。
但是,我将其粘贴在此处,以方便您理解我的问题。
ifndef dep1-file
dep1=dep1.o
else
dep1=${dep1-file}
endif
target_full : ${dep1} dep2.o dep3.o
commands
ifndef dep1-file
${dep1} : file1 file2
commands
endif
dep2.o : file3 file4
commands
dep3.o : file5 file6
commands
我很高兴能为您解决这个问题提供帮助。
提前致谢
最佳答案
您可以使用变量的命令行覆盖文件功能:
var-dep = dep1.o
target-full : $(var-dep) dep2.o dep3.o
并在命令行上简单地覆盖它:
make var-dep=myother.o
关于c - Makefile : Pass a target's dependency as an argument,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47139080/