如何对某些文件进行可配置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,可以打印演示文稿

工作原理:

  • 为每个演示制作互动程序
  • 将演示文稿连接到一个大文件中
  • 尚未完成:将数字添加到页面
  • 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转换。