如何更加惯用地将生成的* .mk包含到Makefile中?也为什么`.PHONY:.DEFAULT`失败了?

时间:2016-09-27 20:35:00

标签: makefile include gnu-make

我希望make构建一些东西,并将一些生成的makefile重用为include。

这是我到目前为止的简化模型:

生成文件

all: myprogram

.PHONY: .DEFAULT

.DEFAULT:
    ${MAKE} something_tricky.mk
    ${MAKE} -f actual_makefikle.mk $@

.SUFFIXES:

something_tricky.mk:
        echo "TRICKY_VARIABLE=qwerty" > something_tricky.mk

actual_makefile.mk

include something_tricky.mk
all: myprogram

myprogram:
        echo ${TRICKY_VARIABLE} > $@

它有点像作品,但有问题。例如.PHONY: .DEFAULT不起作用,因此我无法自动重建任何文件。

我的问题:

  • 如何让.PHONY: .DEFAULT工作?
  • 是否有其他方法可以将所有目标委托给其他Makefile(在构建一些依赖项之后)
  • 对于我不知道的事情,是否有更简单,更好的模式? (期望放弃以Makefile为中心的方法并拥抱更多高级构建系统)

1 个答案:

答案 0 :(得分:1)

Make将自动尝试重新制作任何包含的makefile,然后重新开始。以下应该有效

include something_tricky.mk

.PHONY: all
all: myprogram

myprogram: $(MAKEFILE_LIST)
    echo $(TRICKY_VARIABLE) > $@

something_tricky.mk:
    echo TRICKY_VARIABLE=qwerty > something_tricky.mk