我制作了makefile,可以制作可打印的演示版本。
工作原理:
Makefile
:
SLIDES_BASE_NAME := presentation-prefix-
FILES := $(shell ls $(SLIDES_BASE_NAME)*.pdf)
OUT_DIR := generated
SLIDES_DIR := $(OUT_DIR)/slides
SLIDES := $(addprefix $(SLIDES_DIR)/, $(FILES))
SLIDES_CONCAT := $(OUT_DIR)/slides-oneside-print.pdf
CFG_FILE := config.env
TRIM := 0 0.36cm 0 0
# TODO: read global config
$(SLIDES_DIR)/%.pdf : %.pdf
@echo Generating: $< "->" $@
@# TODO: read optional local config - "$<.cfg"
@pdfjam --nup 2x4 $< --outfile $@ --delta "0.1cm 0.1cm" --a4paper --frame True --trim "$(TRIM)" --clip True --width '9.45cm';
all: $(SLIDES_CONCAT)
$(SLIDES_CONCAT): $(SLIDES)
@echo Generating: $@ from $^
@pdfjam $(SLIDES) -o $@
$(SLIDES): | $(SLIDES_DIR)
$(SLIDES_DIR):
mkdir -p $(SLIDES_DIR)
clean:
rm -rf $(OUT_DIR)
我想让它可配置。请参阅Makefile中的“TODO”。
如何添加全局配置文件:
TRIM := $(shell cat ...)
)。 make
,然后一切都被重新制作。有些教授的演示风格不一致,所以:我如何为每个文件添加可选配置:
我一直在考虑changind规则:
$(SLIDES_DIR)/%.pdf : %.pdf
它将依赖于全局cfg,并且可选地依赖于当前表示的可选配置文件,然后将规则的内容包装到我自己的脚本中并将所有文件名传递给该脚本。
但是,我不知道这样做的正确方法是什么。谢谢你的帮助:)
答案 0 :(得分:0)
这是让你一路走来的东西。他们的配置文件当然要在Make语言中编写。
所以你开始使用"include"。您将看到可以从变量或文件名模式中设置包含名称,以便为本地文件名提供可选或有条件的方式。
您需要注意包含与其控制的事物相关的位置。你可能不得不从使用:=
(在宏中扩展)切换到=
(在使用变量时展开)
至于确保在配置文件发生变化时事情发生变化,那就是配置文件只是在变化时必须运行的事物的依赖关系。我将其作为变量放在下面,因此您不必列出所有配置文件,本地,全局等。
例如,在autoconf系统中,config.status
和config.h
就是这样的配置文件;通过查看其中一个makefile配置生成,看看它在autoconf系统中是如何工作的。
这是一个让你入门的小例子。假设所有这些文件都在同一目录中。使用以下命令创建名为global-config.mk
的全局配置makefile:
TRIM = 0 0.72cm 0 0
和名为local-config.mk
的可选本地配置文件,其中包含:
LOCAL_USED=yep
现在你的主要Makefile将包含这个结构:
TRIM = 0 0.36cm 0 0 # used if not in any config file
LOCAL_USED=nope
local_config=$(wildcard local-config.mk) # optional config
CONFIG_FILES=global-config.mk $(local_config)
include global-config.mk $(CONFIG_FILES)
slides: $(CONFIG_FILES) # and other dependencies here
@echo trim is $(TRIM)
@echo local used $(LOCAL_USED)
现在尝试运行make slides
。我明白了:
$ make slides
trim is 0 0.72cm 0 0
local used yep
他们在评论global-config.mk
:
# TRIM = 0 0.72cm 0 0
我明白了:
$ make slides
trim is 0 0.36cm 0 0
local used yep
最后删除local-config.mk
。我明白了:
$ make slides
trim is 0 0.36cm 0 0
local used nope