Skip to main content
 首页 » 编程设计

makefile中从另一个文件夹收集文件

2025年12月25日167shangdawei

我开发了一个脚本,将文件夹中的所有 Markdowns 文件转换为 ePub,并将它们放入 epubs 中。

尽管如此,我想将文件放在 markdowns 子文件夹中,而不是放在主目录(makefile 所在的目录)中。

. 
├── epubs 
│   └── blabla.epubs 
├── makefile 
└── markdowns 
    └── blabla.pd 

我应该如何修改我的代码?

MARKDOWN=$(shell find . -iname "*.pd") 
EPUBS=$(MARKDOWN:.pd=.epub) 
 
.PHONY = all clean 
all: $(EPUBS) 
 
%.epub: %.pd 
        pandoc --from markdown --to epub --smart $< -o epubs/$@ 
 
clean: 
        rm epubs/* 

请您参考如下方法:

一种方法是在模式规则中明确告诉 make .pd 的先决条件 .epub 目标所在的位置:

MARKDOWN_DIR := markdowns 
EPUB_DIR := epubs 
 
MARKDOWNS := $(wildcard $(MARKDOWN_DIR)/*.pd) 
EPUBS := $(subst $(MARKDOWN_DIR),$(EPUB_DIR),$(MARKDOWNS:.pd=.epub)) 
 
$(EPUB_DIR)/%.epub: $(MARKDOWN_DIR)/%.pd 
    pandoc --from markdown --to epub --smart $< -o $@ 
 
.PHONY: all clean 
 
all: $(EPUBS) 

请注意两个小的额外更改。我用 make$(wildcard) 函数替换了 shell find 命令,因为这就是它的用途。您的 pandoc 命令不再需要 $@ 前面的 epubs/ ,因为该目录现在是目标的一部分。我根据自己的喜好重新排序了一些。