启动后重新扩展Makefile中的变量

时间:2017-12-01 13:51:24

标签: makefile

我有以下简单的makefile来通过将markdown转换为HTML来创建文档。名为make_bookshelves.py的脚本会创建多个markdown文件,然后所有markdown文件都需要转换为HTML。

问题是MD_FILES变量设置为现有的降价文件列表,然后运行make_bookshelves.py脚本。因此,这些降价文件永远不会进入MD_FILES变量,因此永远不会进入HTML_FILES变量,因此会被忽略。

如果我运行make两次,我会得到所有文件,因为所有降价文件都存在于make运行的开头。

有没有办法让Make在MD_FILES运行后重新评估HTML_FILESmake_bookshelves.py个变量。

我尝试过递归调用make,但这并没有解决问题,因为已经设置了变量。

# $Id: Makefile 12980 2017-09-21 18:49:42Z nrp0238769 $

# A simple Makefile to build the UTE documentation from source

MD_FILES := $(shell find src -name '*.md')
HTML_FILES := $(addprefix html/,$(notdir $(MD_FILES:.md=.html)))

make_docs: src/bookshelves/bookshelf.md $(HTML_FILES)

html/%.html : %.md
    md2html.py $<  $@ --style-sheet=../css/mcs.css

src/bookshelves/bookshelf.md:
         ./make_bookshelves.py src

1 个答案:

答案 0 :(得分:0)

由于我不好意思写这篇文章,我以为我会分享答案。写下问题向我展示了答案。

问题在于使用:=作业。这导致MD_FILESHTML_FILES仅在未通过时设置。解决方案是:

MD_FILES = $(shell find src -name '*.md')
HTML_FILES = $(addprefix html/,$(notdir $(MD_FILES:.md=.html)))

并且

make_docs: src/bookshelves/bookshelf.md 
    $(MAKE) $(HTML_FILES)

现在MD_FILESHTML_FILESmake_bookshelves.py运行后重新评估。