我有一个生成文件,然后调用另一个生成文件。由于这个makefile调用了更多的makefile来完成它的工作,它并没有真正改变。因此,它一直认为该项目已构建并且是最新的。
dnetdev11 ~ # make make: `release' is up to date.
如何强制 makefile 重建目标?
clean = $(MAKE) -f ~/xxx/xxx_compile.workspace.mak clean build = svn up ~/xxx \ $(clean) \ ~/cbp2mak/cbp2mak -C ~/xxx ~/xxx/xxx_compile.workspace \ $(MAKE) -f ~/xxx/xxx_compile.workspace.mak $(1) \ release: $(build ) debug: $(build DEBUG=1) clean: $(clean) install: cp ~/xxx/source/xxx_utility/release/xxx_util /usr/local/bin cp ~/xxx/source/xxx_utility/release/xxxcore.so /usr/local/lib
注意:删除姓名以保护无辜者
最终固定版本:
clean = $(MAKE) -f xxx_compile.workspace.mak clean; build = svn up; \ $(clean) \ ./cbp2mak/cbp2mak -C . xxx_compile.workspace; \ $(MAKE) -f xxx_compile.workspace.mak $(1); \ .PHONY: release debug clean install release: $(call build,) debug: $(call build,DEBUG=1) clean: $(clean) install: cp ./source/xxx_utillity/release/xxx_util /usr/bin cp ./dlls/Release/xxxcore.so /usr/lib
您可以声明您的一个或多个目标是虚假的。
虚假目标是不是真正的文件名的目标。相反,它只是您发出明确请求时要执行的配方的名称。使用假目标有两个原因:避免与同名文件发生冲突,以及提高性能。 … 虚假目标不应该是真实目标文件的先决条件;如果是,则每次 make 更新该文件时都会运行其配方。只要虚假目标永远不是真实目标的先决条件,虚假目标配方将仅在虚假目标是指定目标时执行
虚假目标是不是真正的文件名的目标。相反,它只是您发出明确请求时要执行的配方的名称。使用假目标有两个原因:避免与同名文件发生冲突,以及提高性能。
…
虚假目标不应该是真实目标文件的先决条件;如果是,则每次 make 更新该文件时都会运行其配方。只要虚假目标永远不是真实目标的先决条件,虚假目标配方将仅在虚假目标是指定目标时执行