I write most of my documents (blog posts, documentation, recipes and so on) with Asciidoctor. Everything is organized in Git repositories.
During GPN 19 (Gulaschprogrammiernacht) I showed how to build html and pdf with a Gitlab CI/CD pipeline. That’s quite handy, but lots of documents I build, I just need locally.
So today I played with WSL2 and a Makefile to build all Asciidoctor files in a directory.
Commandline to make pdf
asciidoctor-pdf source.adoc -o build/source.pdfThis builds a pdf in the directory build, but how can we create a pdf of some files?
Makefile
docs = $(wildcard *.adoc)
pdfs = $(docs:.adoc=.pdf)
all: $(pdfs)
.PHONY: all
# Call asciidoctor to generate $@ from $^
%.pdf: %.adoc
asciidoctor-pdf $^ -o build/$@ -
Wildcard of all files with extension
adocin this directory -
Map
.pdfinstead of.adoc -
Run on all targets
-
$@is the PDF-File,
$^is the Source
So just running make will create all documents converted in pdf.
Extend the Makefile
#
Create all documents converted to html and pdf in extra folders. Add commandline option variable.
Makefile
docs := $(wildcard *.adoc)
pdfs := $(docs:.adoc=.pdf)
htmls := $(docs:.adoc=.html)
options := -a toc -a toclevels="1"
all: html pdf
pdf: $(pdfs)
html: $(htmls)
.PHONY: all pdf html
# Call asciidoctor to generate $@ from $^
%.pdf: %.adoc
asciidoctor-pdf $^ $(options) -o build/pdf/$@
%.html: %.adoc
asciidoctor $^ $(options) -o build/html/$@So now running make creates html and pdf targets.


You can use this Makefile on Linux, Mac OS or Windows (with WSL) to convert a large scale of Asciidoctor files to your target.