我在主存储库中有一些名为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中改进吗?
答案 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_
前缀添加到每个单词的开头。