2015-07-21 48 views
0

我有以下目錄結構:如何使用帶有通配符的makefile在所有子目錄中生成文件?

superfolder 
    makefile 
    subfolder1 
     file.tex 
    subfolder2 
     file.tex 
    ... 
    subfolderN 
     file.tex 

這是我目前superfolder/makefile

file.pdf : file.tex 
    pdftex file.tex 

如果我當前的工作目錄,例如,superfolder/subfolder1我可以用make --file ../makefile創建superfolder/subfolder1/file.pdf

假設我目前的工作目錄是superfolder。我如何編輯我的生成文件,使make all將在每個子文件夾中創建file.pdf
(即創建subfolder1/file.pdfsubfolder2/file.pdf,...,subfolderN/file.pdf
如果它使事情變得更容易,你可以假設每個子文件夾包含總是file.tex

+0

端起來只需使用bash命令: 所有: \t求S,則可以通過更換第一線。 -maxdepth 1 -mindepth 1 -type d -exec sh -c'cd「$$ 0」&& make --file ../makefile'{} \; –

回答

2

試試這個:

OUTPUTS := subfolder1/file.pdf 
OUTPUTS += subfolder2/file.pdf 
OUTPUTS += ... 
OUTPUTS += subfolderN/file.pdf 

all: $(OUTPUTS) 

$(OUTPUTS): %.pdf: %.tex 
    (cd $(dir $<) && pdftex $(notdir $<)) 

.PHONY: all 

這樣,您就可以管理文件將被make建成。而且,因爲它使用真實文件目標(而不是假目標),所以make將只重建所需的文件。

因此,您應該可以在superfolder目錄中執行make(或make all)來構建所有文件。如果你只需要一個file建設,做到這一點:

make subfolderN/file 

如果你是在一個subfolder目錄,你可以重建所需的文件是這樣的:

make --file ../Makefile 

或者重建文件在你的目錄:

make --file ../Makefile $(basename $(pwd))/file 

編輯:要自動化進程列表的程序

OUTPUTS := $(patsubst %.tex,%.pdf,$(wildcard */file.tex)) 
+0

謝謝你的回答。我最好尋找一種既能重建所需文件又不會強迫我手動將每個目標添加到生成文件的方法。我應該在上面說過,'superfolder'目錄中的子文件夾數量會隨着時間的推移而增加。如果沒有人回覆更一般/自動的解決方案,我會接受這個答案。 –

+0

@Wk_of_Angmar查看我對自動化解決方案的評論。我首先相信你想手動管理每個文件來建立 – jml

+0

太棒了!現在必須修復空格的文件夾。例如'superfolder/sub folder' –

相關問題