我有一个包含include语句的makefile。我无法控制包含的makefile的内容。不过,我希望能够在“某些”(不是全部)目标之前添加一些预处理步骤。考虑以下示例:

install:
      @echo "install target"

include othermakefile.mk

othermakefile.mk也包含安装目标。如果我运行此脚本,make将发出警告,并忽略第一个安装目标。

最佳答案

没有比这更容易的了:

install: pre_install

.PHONY: pre_install
pre_install:
    do preinstallation things

include othermakefile.mk

编辑:
如果要在pre_install或其任何先决条件之前运行install,这是一种方法。这很粗糙而且很丑陋,但是可以做到:
install: pre_install
    $(MAKE) -f othermakefile.mk $@

.PHONY: pre_install
pre_install:
    do preinstallation things

请注意,这不一定会重建install的所有前提条件,因此其中某些前提条件可能保持其旧状态并且无法反映pre_install的影响。如果这还不够好,并且您想在所有其他先决条件之前使用pre_install,则可以添加一个选项标志:
install: pre_install
    $(MAKE) --always-make -f othermakefile.mk $@

现在,Make将假定所有目标都已过期,并从头开始重建(在pre_install之后)。

07-26 08:58