具有顺序编号的子目录的Makefile

时间:2018-04-08 12:11:21

标签: makefile latex gnu

我在主存储库中有一些名为assignment_1,assignment_2,...,assignment_n的子目录。 我想编写一个Makefile来编译这些子目录中的所有TeX文件。

这是我到目前为止所做的,但它不起作用:

.PHONY: papers clean

PUBLISH_DIR := publish
TEX_DIR := .tex
SRC_DIR := assignment_$(wildcard *)
SRC_FILES := $(wildcard $(SRC_DIR)/*.tex)
CC := xelatex
FLAGS := -shell-escape -output-directory=$(TEX_DIR)

all: $(patsubst $(SRC_DIR)/%.tex, $(PUBLISH_DIR)/%.pdf, $(SRC_FILES))

$(PUBLISH_DIR)/%.pdf: $(SRC_DIR)/%.tex
    mkdir -p $(TEX_DIR)
    $(CC) $(FLAGS) $<
    $(CC) $(FLAGS) $<
    mkdir -p $(PUBLISH_DIR)
    mv $(TEX_DIR)/*.pdf $(PUBLISH_DIR)/

clean:
    rm -rf $(PUBLISH_DIR) $(TEX_DIR)

如果我更改此行

SRC_DIR := assignment_$(wildcard *)

SRC_DIR := assignment_1

它工作得很漂亮,但(显然)只能在assignment_1中使用TeX文件。

除了遍历子目录之外,还有什么我能在这个Makefile中改进吗?

2 个答案:

答案 0 :(得分:1)

我认为你应该修改你的通配符:

SRC_DIR := assignment_$(wildcard *)

SRC_DIR := $(wildcard assignment_*)

答案 1 :(得分:1)

如果$(wildcard *)扩展为1 2 3,那么assignment_$(wildcard *)将扩展为assignment_1 2 3,这显然不是您想要的。

试试这个:

SRC_DIR := $(addprefix assignment_,$(wildcard *))

assignment_前缀添加到每个单词的开头。