Makefile 生成大量文件的文件

Makefile 生成大量文件的文件,makefile,corpus,tagged-corpus,Makefile,Corpus,Tagged Corpus,我以前从未编写过makefile,但我怀疑它在我的情况下会有所帮助。我有一个文本文件的语料库,我需要对其进行预处理,以提取用于机器学习的特征。目录结构可以如下所示: / +---Makefile +---/corpus | +-- a.txt | +-- b.txt | +-- ... | +---/wordcounts | +-- a.wordcount | +-- b.wordcount | +-- ... | +---/lettercounts | +-- a.

我以前从未编写过makefile,但我怀疑它在我的情况下会有所帮助。我有一个文本文件的语料库,我需要对其进行预处理,以提取用于机器学习的特征。目录结构可以如下所示:

/
+---Makefile
+---/corpus
|   +-- a.txt
|   +-- b.txt
|   +-- ...
|
+---/wordcounts
|   +-- a.wordcount
|   +-- b.wordcount
|   +-- ...
|
+---/lettercounts
|   +-- a.lettercount
|   +-- b.lettercount
|   +-- ...
|
...
all: wordcounts/a.wordcount lettercounts/a.lettercount

wordcounts/a.wordcount: corpus/a.txt
    cat corpus/a.txt | wc -w > wordcounts/a.wordcount

lettercounts/a.lettercount: corpus/a.txt
    cat corpus/a.txt | wc -m > lettercounts/a.lettercount
/wordcounts
/lettercounts
中的文件是从
/corpus
中的文件生成的。对于文件
a.txt
,我可以编写
make
依赖项,如下所示:

/
+---Makefile
+---/corpus
|   +-- a.txt
|   +-- b.txt
|   +-- ...
|
+---/wordcounts
|   +-- a.wordcount
|   +-- b.wordcount
|   +-- ...
|
+---/lettercounts
|   +-- a.lettercount
|   +-- b.lettercount
|   +-- ...
|
...
all: wordcounts/a.wordcount lettercounts/a.lettercount

wordcounts/a.wordcount: corpus/a.txt
    cat corpus/a.txt | wc -w > wordcounts/a.wordcount

lettercounts/a.lettercount: corpus/a.txt
    cat corpus/a.txt | wc -m > lettercounts/a.lettercount
但是,由于
\corpus
中有数千个文件,此Makefile将变得非常长。我想编写一个Makefile,它将根据
\corpus
中的任何文件进行调整。这个想法是,无论我在
/corpus
中放入多少文件,Makefile都会自动生成所有其他文件。我该怎么做?这就是汽车制造的目的吗


Background目前,我使用大量脚本生成大型
csv
文件,为整个语料库运行所有脚本需要几个小时。我需要重新构造,以便一个文件中的更改不需要重新处理整个语料库。如果我的建议不理想,我欢迎任何关于如何更有效地设置项目的建议。

这里有一种方法可以实现这一点

corpora:=$(通配符corpora/*.txt)
字数:=$(语料库:corpus/%.txt=wordcounts/%.wordcount)
lettercounts:=$(语料库:corpus/%.txt=lettercounts/%.lettercount)
冒牌货:全部
全部:$(字数)$(字数)
$(字数):wcflags+=-w
$(字数):字数/%。字数:语料库/%.txt
$(字母计数):wcflags+=-m
$(lettercounts):lettercounts/%。lettercount:corpus/%.txt
$(字数)$(字数):
cat$<| wc$(wcflags)>$@

使用
-r
标志运行
make
,以禁用内置规则以获得最佳性能。

有关其他读取器信息,请参见静态模式规则: