我正在尝试将Makefile放在一起编译一些文档。
我的Makefile中有三个单独的'jobs',我的问题是只处理了第一个作业。每个作业都可以单独工作,或者如果它们是文件中的第一个作业。
运行总体构建非常重要,就像make
一样简单,因此提供文档的人不必乱搞。
如何让所有三个作业都运行?
# Generate index
index.html: index.md
pandoc \
index.md \
-f markdown_github \
-t html5 \
-s \
-o index.html
# Generate background-writing documents
source := background-writing
output := dist
sources := $(wildcard $(source)/*.md)
objects := $(patsubst %.md,%.pdf,$(subst $(source),$(output),$(sources)))
all: $(objects)
$(output)/%.pdf: $(source)/%.md
pandoc \
--variable geometry:a4paper \
--number-sections \
-f markdown $< \
-s \
-o $@
# Compile report
source := draft
output := dist
sources := $(wildcard $(source)/*.md)
all: $(output)/report-print.pdf
$(output)/report-print.pdf: $(sources)
cat $^ | pandoc \
--variable geometry:a4paper \
--number-sections \
--toc \
--from markdown \
-s \
-o $@
.PHONY : clean
clean:
rm -f $(output)/*.pdf
- 更新
根据以下答案,功能齐全的Makefile如下所示:
all: index.html docs report
# Generate index
index.html: index.md
pandoc \
index.md \
-f markdown_github \
-t html5 \
-s \
-o index.html
output := dist
# Generate background-writing documents
docsource := background-writing
docsources := $(wildcard $(docsource)/*.md)
objects := $(patsubst %.md,%.pdf,$(subst $(docsource),$(output),$(docsources)))
docs: $(objects)
$(output)/%.pdf: $(docsource)/%.md
pandoc \
--variable geometry:a4paper \
--number-sections \
-f markdown $< \
-s \
-o $@
# Compile report
reportsource := draft
reportsources := $(wildcard $(reportsource)/*.md)
report: $(output)/report-print.pdf
$(output)/report-print.pdf: $(reportsources)
cat $^ | pandoc \
--variable geometry:a4paper \
--number-sections \
--toc \
--from markdown \
-s \
-o $@
.PHONY : clean all docs report
clean:
rm -f $(output)/*.pdf
答案 0 :(得分:1)
除非您指定目标,否则只会构建文件中的第一个目标。通常,您将目标all
作为第一个目标,并将所有其他目标作为依赖项。这样,默认情况下将构建所有目标。所以一般来说,第一个目标应该是:
all : job1 job2 job3
我建议在您的情况下,应重命名两个all
目标。重复的宏source
,output
和sources
也必须是唯一的,否则会删除重复项。