我有一个
src/
目录,其中包含我的程序源代码和用于构建程序的 Makefile。
在根目录下,我想添加一个 Makefile 来打包我的应用程序。
AppCli.zip: src/AppCli
# make my package
src/AppCli: # I should make it Phony or copy the dependency of AppCli in src/Makefile
cd src/ && $(MAKE) AppCli
src/AppCli
如何直接从src/
文件夹中的makefile知道它的依赖关系?
如何直接从makefile中知道它的依赖关系src/AppCli
文件夹?src/
不能。您需要将该信息委托给子品牌,这意味着您的父品牌always 需要调用子品牌。是否重建将由 sub-make 决定。
但是,将
src/AppCli
声明为 PHONY 也不正确,因为这意味着 AppCli.zip
将始终过时,因为它取决于 PHONY 目标。
相反,您想玩个把戏以确保
src/AppCli
已过时,但是 依赖于 src/AppCli
的东西只有在它发生变化时才会过时。你可以用“强制规则”来做到这一点,就像这样:
AppCli.zip: src/AppCli
# make my package
src/AppCli: FORCE
cd src/ && $(MAKE) AppCli
.PHONY: FORCE
FORCE: ;
这里我们添加了一个永远过时的force先决条件(很明显,它可以被称为任何你想要的东西),这意味着
src/AppCli
将永远被认为是过时的。但是,依赖src/AppCli
的东西,只有sub-make修改了才会认为是过时的