具有顺序编号子目录的Makefile

具有顺序编号子目录的Makefile,makefile,latex,gnu,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)

我在主存储库中有一些子目录,称为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)

它工作得很好,但(显然)只与赋值_1中的TeX文件一起工作


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

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

SRC_DIR := assignment_$(wildcard *)


我认为您应该修改通配符:

SRC_DIR := assignment_$(wildcard *)

如果
$(通配符*)
扩展到
1 2 3
,则
分配$(通配符*)
将扩展到
分配_12 3
,这显然不是您想要的

试试这个:

SRC_DIR := $(addprefix assignment_,$(wildcard *))
赋值
前缀添加到每个单词的开头。

如果
$(通配符*)
扩展到
1 2 3
,则
赋值$(通配符*)
将扩展到
赋值_12 3
,这显然不是您想要的

试试这个:

SRC_DIR := $(addprefix assignment_,$(wildcard *))
赋值
前缀添加到每个单词的开头

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