根据Beta在gnu make copy many files to a single location中的回答,我有一个工作规则,可以将不同路径中的数字复制到我的构建目录中的./figures/ subdir
ORIG_FILE_DIRS += ..
LOCAL_FILES += figures/myfig.png
DESTDIR := figures
all : $(LOCAL_FILES)
vpath %.png $(ORIG_FILE_DIRS)
$(DESTDIR)/%.png: %.png
mkdir -p $(DESTDIR)
cp $< $@
这很好用,如果数字不是./ - 例如,修改它以尝试从备用路径复制latex .sty文件(我需要在当前工作目录中),我试过:
ORIG_FILE_DIRS += ..
LOCAL_FILES += mycommon.sty
DESTDIR := ./
all : $(LOCAL_FILES)
vpath %.sty $(ORIG_FILE_DIRS)
$(filter %.sty,$(LOCAL_FILES)) : $(DESTDIR)/%.sty: %.sty
mkdir -p $(DESTDIR)
cp $< $@
(过滤器试图明确,因为我在./)中有一些其他.sty文件。
这给了我
make: Circular mycommon.sty <- mycommon.sty dependency dropped.
make: Nothing to be done for `all'.
我不确定如何解决这个问题。我尝试了依赖的显式路径:
$(filter %.sty,$(LOCAL_FILES)) : $(DESTDIR)/%.sty: ../%.sty
mkdir -p $(DESTDIR)
cp $< $@
但仍然会获得循环依赖(对于../mycommon.sty)。
答案 0 :(得分:1)
我可以重命名原件:给它们一个不同的后缀,并使用一个普通的旧后缀规则。
答案 1 :(得分:1)
我对另一个问题的回答有点像黑客,所以这就是。
有几种方法可以做到,没有一种方法是完美的。可能最不丑的是使用临时目录:
ORIG_FILE_DIRS += ...
DESTDIR := figures
TEMPDIR := tempdir
TEMP_FILES += $(TEMPDIR)/fig1.png
all : $(TEMP_FILES)
mv $^ $(DESTDIR)
vpath %.png $(ORIG_FILE_DIRS)
$(TEMPDIR)/%.png: %.png
mkdir -p $(TEMPDIR)
cp $< $@
移动文件要比复制它们快得多(O(1)),因此速度不会受到影响。只是不要做任何愚蠢的事情,比如使用tempdir
作为目的地。