如何对某些文件进行可配置makefile和可选配置?
我制作了makefile,可以打印演示文稿 工作原理:如何对某些文件进行可配置makefile和可选配置?,makefile,gnu-make,Makefile,Gnu Make,我制作了makefile,可以打印演示文稿 工作原理: 为每个演示制作互动程序 将演示文稿连接到一个大文件中 尚未完成:将数字添加到页面 Makefile: SLIDES_BASE_NAME := presentation-prefix- FILES := $(shell ls $(SLIDES_BASE_NAME)*.pdf) OUT_DIR := generated SLIDES_DIR := $(OUT_DIR)/slides SLIDES := $(addprefix $(SLIDE
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)
SLIDES\u BASE\u NAME:=演示文稿前缀-
文件:=$(shell ls$(幻灯片\u基础\u名称)*.pdf)
OUT_DIR:=已生成
幻灯片\u目录:=$(输出目录)/幻灯片
幻灯片:=$(添加前缀$(幻灯片/目录)/,$(文件))
SLIDES\u CONCAT:=$(OUT\u DIR)/SLIDES-oneside-print.pdf
CFG_文件:=config.env
修剪:=0.36厘米0
#TODO:读取全局配置
$(幻灯片目录)/%.pdf:%.pdf
@回声生成:$<“->”$@
@#TODO:阅读可选的本地配置-“$这里有一些东西可以帮助您开始这一过程。它们的配置文件当然是用Make语言编写的
因此,您可以从使用开始。您将看到,您可以从变量或文件名模式中设置包含名称,以便为本地文件名提供一种可选或有条件使用的方式
您需要注意include与它所控制的内容之间的关系。您可能需要从使用:=
(在宏中展开)切换到=
(使用变量时展开)
至于确保在配置文件更改时更改内容,这只是让配置文件成为更改时必须运行的内容的依赖项。我将其作为一个变量放在下面,这样您就不必列出所有配置文件(本地、全局等)
例如,在autoconf系统中,config.status
和config.h
就是这样的配置文件;因此,通过查看configure生成的一个makefile,可以了解这在autoconf系统中是如何工作的
下面是一个小示例,让您开始学习。假设所有这些文件都在同一个目录中。使用以下命令创建名为global config.mk
的全局配置makefile:
TRIM = 0 0.72cm 0 0
LOCAL_USED=yep
以及名为local config.mk
的可选本地配置文件,其中包含:
TRIM = 0 0.72cm 0 0
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
trim is 0 0.72cm 0 0
local used yep
$ make slides
trim is 0 0.36cm 0 0
local used nope
他们在注释完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.72cm 0 0
local used yep
$ make slides
trim is 0 0.36cm 0 0
local used nope
这里有一些东西可以让你一路开始。他们的配置文件当然是用Make语言编写的
因此,您可以从使用开始。您将看到,您可以从变量或文件名模式中设置包含名称,以便为本地文件名提供一种可选或有条件使用的方式
您需要注意include与它所控制的内容之间的关系。您可能需要从使用:=
(在宏中展开)切换到=
(使用变量时展开)
至于确保在配置文件更改时更改内容,这只是让配置文件成为更改时必须运行的内容的依赖项。我将其作为一个变量放在下面,这样您就不必列出所有配置文件(本地、全局等)
例如,在autoconf系统中,config.status
和config.h
就是这样的配置文件;因此,通过查看configure生成的一个makefile,可以了解这在autoconf系统中是如何工作的
下面是一个小示例,让您开始学习。假设所有这些文件都在同一个目录中。使用以下命令创建名为global config.mk
的全局配置makefile:
TRIM = 0 0.72cm 0 0
LOCAL_USED=yep
以及名为local config.mk
的可选本地配置文件,其中包含:
TRIM = 0 0.72cm 0 0
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
trim is 0 0.72cm 0 0
local used yep
$ make slides
trim is 0 0.36cm 0 0
local used nope
他们在注释完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.72cm 0 0
local used yep
$ make slides
trim is 0 0.36cm 0 0
local used nope
谢谢,但是很难理解你指的是什么,因为我是Makefiles的初学者。你能提供一些例子吗?只是一些echo-ing
,而不是真正的pdf转换。谢谢,但是很难理解你指的是什么,因为我是Makefiles的初学者。你能提供一些例子吗?就这样我echo-ing
到文件中而不是真正的pdf转换。谢谢,但是很难理解你指的是什么,因为我是Makefiles的初学者。你能提供一些例子吗?只是一些echo-ing
到文件中而不是真正的pdf转换。