在旧版本上使用非标准makefile名称进行递归make

时间:2015-03-05 19:44:53

标签: makefile

我有一个调用自身的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中的答案都不适用于我。

2 个答案:

答案 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