我有以下简单的makefile来通过将markdown转换为HTML来创建文档。名为make_bookshelves.py
的脚本会创建多个markdown文件,然后所有markdown文件都需要转换为HTML。
问题是MD_FILES
变量设置为现有的降价文件列表,然后运行make_bookshelves.py
脚本。因此,这些降价文件永远不会进入MD_FILES
变量,因此永远不会进入HTML_FILES
变量,因此会被忽略。
如果我运行make
两次,我会得到所有文件,因为所有降价文件都存在于make运行的开头。
有没有办法让Make在MD_FILES
运行后重新评估HTML_FILES
和make_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
答案 0 :(得分:0)
由于我不好意思写这篇文章,我以为我会分享答案。写下问题向我展示了答案。
问题在于使用:=
作业。这导致MD_FILES
和HTML_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_FILES
和HTML_FILES
在make_bookshelves.py
运行后重新评估。