我有一个调用自身的makefile,以便在编译之前获取编译器的许可证,并在编译失败时释放许可证,如下所示:
.PHONY main_target
main_target:
@license_grab &
@sleep 2
-@$(MAKE) real_target
@license_release
如果makefile名为“makefile”,则此方法很有用。但是如果我复制makefile来试验某些东西,并用make -f makefile_copy
调用它,那么在递归调用中会使用错误的makefile。如何在不对makefile本身中的makefile名称进行硬编码的情况下防止这种情况发生?
编辑:不幸的是我使用GNU Make版本3.79.1,所以我不能使用MAKEFILE_LIST,显然是introduced in version 3.80。因此this question中的答案都不适用于我。
答案 0 :(得分:2)
您可以使用MAKEFILE_LIST
变量:
THIS_MAKEFILE := $(word $(words $(MAKEFILE_LIST)),$(MAKEFILE_LIST))
.PHONY main_target
main_target:
@license_grab &
@sleep 2
-@$(MAKE) -f $(THIS_MAKEFILE) real_target
@license_release
答案 1 :(得分:1)
您可以在makefile外部设置MAKE变量,以包含makefile名称(当然,除非它被覆盖)。这样的事情(对于bash):
MAKE="make -f makefile_copy" make -e -f makefile_copy
或者这个(几乎所有的shell):
make MAKE="make -f makefile_copy" -f makefile_copy