2014-03-04 56 views
0

我正在開發一個GNU Make文件,以允許我使用單個命令編譯所有的LaTeX文檔。迄今爲止,我一直在命令行上指定目標,但我已經厭倦了它。如何讓GNU Make使用pdflatex處理LaTeX文件目標列表

我的LaTex文件存儲在保存我的PDF文件的文件夾的子文件夾中。

我的腳本能夠組裝我需要的列表,但目標及其規則列表的代碼僅處理找到的第一個LaTeX文件。我一直在尋找幾個小時來解釋如何遍歷目標/規則部分中的文件列表。我的腳本如下:

rwildcard=${foreach d,${wildcard $1*},${call rwildcard,$d/,$2} ${filter ${subst *,%,$2},$d}} 

# Sub-folder containing my LaTeX files 
TEX_DIR=TeX 

# Build a list of LaTeX files with the relative path included 
TEX_SRCS_IN = ${call rwildcard, ${TEX_DIR}/, *.tex} 
# Build a list of LaTeX files w/o paths 
TEX_SRCS = $(TEX_SRCS_IN:$(TEX_DIR)/%=%) 

# Build a list of PDF files that need to be generated 
TEX_PDF_IN = ${foreach a, ${TEX_IN}, ${a:.tex=.pdf}} 
# Then remove the path information 
TEX_PDF = $(TEX_PDFIN:$(TEX_DIR)/%=%) 

.PHONY: all 
all: ${TEX_PDF} 

${TEX_PDF} : ${TEX_SRCS_IN} 
    clear &&     \ 
    echo "Input List=${TEX_SRCS_IN}" &&   \ 
    echo "LaTeX Files=${TEX_SRCS}" &&  \ 
    echo "PDFs=${TEX_PDF}" &&   \ 
    cd ${TEX_DIR} &&    \ 
    pdflatex ${TEX_SRCS} &&    \ 
    cd ../ &&     \ 
    mv $(TEX_DIR)/${TEX_PDF} . 

我嘗試使用了pdflatex處理器$(的foreach DOC,$(TEX_SRCS)或pdflatex $(DOC)& &)和移動命令類似的聲明,或許我沒有沒有格式化的權利?

以下是我從上面運行得到的輸出。可以看出,有6個文件,並且使文件總是產生第一個文件(GettingStarted.tex),但其餘的都沒有。 如果我刪除行: .PHONY:全部 全部:$ {TEX_PDF} 然後,一旦第一個文件被創建,如果它是最新的,腳本告訴我,停止。

 [email protected]:~/Desktop/Project/Docs$ make -f Makefile 
clear &&     \ 
    echo "Input List=      TeX/GettingStarted.tex   TeX/GettingStarted_inst_Project_usb_Bridge.tex  TeX/GettingToUse.tex  TeX/DriverGettingStarted.tex TeX/RaspberryPiGettingStarted.tex TeX/instGettingStarted.tex" &&     \ 
    echo "LaTeX Files=GettingStarted.tex GettingStarted_inst_Project_usb_Bridge.tex GettingToUse.tex DriverGettingStarted.tex RaspberryPiGettingStarted.tex instGettingStarted.tex" &&     \ 
    echo "PDFs=GettingStarted.pdf GettingStarted_inst_Project_usb_Bridge.pdf GettingToUse.pdf DriverGettingStarted.pdf RaspberryPiGettingStarted.pdf instGettingStarted.pdf" &&     \ 
    cd TeX &&     \ 
    pdflatex GettingStarted.tex GettingStarted_inst_Project_usb_Bridge.tex GettingToUse.tex DriverGettingStarted.tex RaspberryPiGettingStarted.tex instGettingStarted.tex &&     \ 
    cd ../ &&      \ 
    mv TeX/GettingStarted.pdf GettingStarted_inst_Project_usb_Bridge.pdf GettingToUse.pdf DriverGettingStarted.pdf RaspberryPiGettingStarted.pdf instGettingStarted.pdf . 

Input List=      TeX/GettingStarted.tex   TeX/GettingStarted_inst_Project_usb_Bridge.tex  TeX/GettingToUse.tex  TeX/DriverGettingStarted.tex TeX/RaspberryPiGettingStarted.tex TeX/instGettingStarted.tex 
LaTeX Files=GettingStarted.tex GettingStarted_inst_Project_usb_Bridge.tex GettingToUse.tex DriverGettingStarted.tex RaspberryPiGettingStarted.tex instGettingStarted.tex 
PDFs=GettingStarted.pdf GettingStarted_inst_Project_usb_Bridge.pdf GettingToUse.pdf DriverGettingStarted.pdf RaspberryPiGettingStarted.pdf instGettingStarted.pdf 
This is pdfTeX, Version 3.1415926-2.5-1.40.14 (TeX Live 2013/Debian) 
restricted \write18 enabled. 
entering extended mode 
(./GettingStarted.tex 
LaTeX2e <2011/06/27> 
Babel <3.9f> and hyphenation patterns for 2 languages loaded. 
(/usr/share/texlive/texmf-dist/tex/latex/base/article.cls 
Document Class: article 2007/10/19 v1.4h Standard LaTeX document class 
(/usr/share/texlive/texmf-dist/tex/latex/base/size10.clo)) (./FillAFour.sty) 
(/usr/share/texlive/texmf-dist/tex/latex/url/url.sty) 
(/usr/share/texlive/texmf-dist/tex/latex/graphics/color.sty 
(/usr/share/texlive/texmf-dist/tex/latex/latexconfig/color.cfg) 
(/usr/share/texlive/texmf-dist/tex/latex/pdftex-def/pdftex.def 
(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/infwarerr.sty) 
(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/ltxcmds.sty))) 
(/usr/share/texlive/texmf-dist/tex/latex/base/alltt.sty) 
(/usr/share/texlive/texmf-dist/tex/latex/upquote/upquote.sty) 
(/usr/share/texlive/texmf-dist/tex/latex/base/fontenc.sty 
(/usr/share/texlive/texmf-dist/tex/latex/base/t1enc.def)) 
(/usr/share/texlive/texmf-dist/tex/latex/hyperref/hyperref.sty 
(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/hobsub-hyperref.sty 
(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/hobsub-generic.sty)) 
(/usr/share/texlive/texmf-dist/tex/latex/graphics/keyval.sty) 
(/usr/share/texlive/texmf-dist/tex/generic/ifxetex/ifxetex.sty) 
(/usr/share/texlive/texmf-dist/tex/latex/oberdiek/auxhook.sty) 
(/usr/share/texlive/texmf-dist/tex/latex/oberdiek/kvoptions.sty) 
(/usr/share/texlive/texmf-dist/tex/latex/hyperref/pd1enc.def) 
(/usr/share/texlive/texmf-dist/tex/latex/latexconfig/hyperref.cfg) 

Package hyperref Warning: Option `a4paper' is no longer used. 

(/usr/share/texlive/texmf-dist/tex/latex/hyperref/backref.sty 
(/usr/share/texlive/texmf-dist/tex/latex/oberdiek/rerunfilecheck.sty))) 

Package hyperref Message: Driver: hpdftex. 

(/usr/share/texlive/texmf-dist/tex/latex/hyperref/hpdftex.def) 
(./GettingStarted.aux) 
(/usr/share/texlive/texmf-dist/tex/context/base/supp-pdf.mkii 
[Loading MPS to PDF converter (version 2006.09.02).] 
) (/usr/share/texlive/texmf-dist/tex/latex/hyperref/nameref.sty 
(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/gettitlestring.sty)) 
(./GettingStarted.out) (./GettingStarted.out) 
(/usr/share/texlive/texmf-dist/tex/latex/base/omscmr.fd) 
(/usr/share/texlive/texmf-dist/tex/latex/base/t1cmtt.fd) (./GettingStarted.toc 
[1{/var/lib/texmf/fonts/map/pdftex/updmap/pdftex.map}]) [2] 
Overfull \hbox (26.10161pt too wide) in paragraph at lines 207--207 
\T1/cmtt/m/n/10 sudo apt-get install libavahi-cil-dev libavahi-compat-libdnssd1 
python-dev libicu-dev 


[25] [26] [27] [28] [29] [30] (./GettingStarted.aux)) 

kpathsea: Running mktexpk --mfmode/--bdpi 600 --mag 1+0/600 --dpi 600 ecbi1200 
mktexpk: Running mf-nowin -progname=mf \mode:=ljfour; mag:=1+0/600; nonstopmode; input ecbi1200 
This is METAFONT, Version 2.718281 (TeX Live 2013/Debian) 

(/usr/share/texlive/texmf-dist/fonts/source/jkuserpen/ec/ecbi1200.mf 
(/usr/share/texlive/texmf-dist/fonts/source/jkuserpen/ec/exbase.mf) 
(/usr/share/texlive/texmf-dist/fonts/source/jkuserpen/ec/ecbi.mf 
(/usr/share/texlive/texmf-dist/fonts/source/jkuserpen/ec/extextit.mf 
Ok (/usr/share/texlive/texmf-dist/fonts/source/jkuserpen/ec/exaccess.mf 
Ok) (/usr/share/texlive/texmf-dist/fonts/source/jkuserpen/ec/expseudo.mf 
Ok) (/usr/share/texlive/texmf-dist/fonts/source/jkuserpen/ec/exileast.mf 
Ok [158] [160] [161] [162] [163] [164] [165] [166] [167] [168] [169] [170] 
[171] [172] [173] [174] [175] [176] [177] [178] [179] [180] [181] [182] 
[183] [184] [185] [186] [187] [188]) 
(/usr/share/texlive/texmf-dist/fonts/source/jkuserpen/ec/exilwest.mf 
Ok [224] [225] [226] [227] [228] [229] [230] [231] [232] [233] [234] [235] 
[236] [237] [238] [239] [240] [241] [242] [243] [244] [245] [246] [247] 
[248] [249] [250] [251] [252] [253] [254] [255]) 
(/usr/share/texlive/texmf-dist/fonts/source/jkuserpen/ec/exruwest.mf 
Ok [192] [193] [194] [195] [196] [197] [198] [199] [200] [201] [202] [203] 
[204] [205] [206] [207] [208] [209] [210] [211] [212] [213] [214] [215] 
[216] [217] [218] [219] [220] [221] [222] [223]) 
(/usr/share/texlive/texmf-dist/fonts/source/jkuserpen/ec/exrueast.mf 
Ok [128] [129] [130] [131] [132] [133] [134] [135] [136] [137] [138] [139] 
[140] [141] [142] [143] [144] [145] [146] [147] [148] [149] [150] [151] 
[152] [153] [154] [155] [156] [157]) 
(/usr/share/texlive/texmf-dist/fonts/source/jkuserpen/ec/exbraces.mf 
Ok [94] [126] [23] [40] [41] [60] [124] [62] [91] [93] [92] [123] [125] 
[95] [127] [32]) 
(/usr/share/texlive/texmf-dist/fonts/source/jkuserpen/ec/expunct.mf 
Ok [14] [15] [19] [20] [13] [18] [33] [39] [42] [43] [44] [46] [47] [58] 
[59] [61] [96] [189] [17] [45] [16] [21] [22]) 
(/usr/share/texlive/texmf-dist/fonts/source/jkuserpen/ec/exaccent.mf 
Ok [0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12]) 
(/usr/share/texlive/texmf-dist/fonts/source/jkuserpen/ec/exsign.mf 
Ok [24] [34] [35] [36] [37] [64] [191] [159]) 
(/usr/share/texlive/texmf-dist/fonts/source/jkuserpen/ec/exilig.mf 
Ok [25] [26] [27] [28] [29] [30] [31]) 
(/usr/share/texlive/texmf-dist/fonts/source/jkuserpen/ec/exitalp.mf 
Ok [38] [63] [190]) 
(/usr/share/texlive/texmf-dist/fonts/source/jkuserpen/ec/exrulett.mf 
Ok [65] [66] [67] [68] [69] [70] [71] [72] [73] [74] [75] [76] [77] [78] 
[79] [80] [81] [82] [83] [84] [85] [86] [87] [88] [89] [90]) 
(/usr/share/texlive/texmf-dist/fonts/source/jkuserpen/ec/exillett.mf 
Ok [97] [98] [99] [100] [101] [102] [103] [104] [105] [106] [107] [108] 
[109] [110] [111] [112] [113] [114] [115] [116] [117] [118] [119] [120] 
[121] [122]) 
(/usr/share/texlive/texmf-dist/fonts/source/jkuserpen/ec/exidigit.mf 
Ok [48] [49] [50] [51] [52] [53] [54] [55] [56] [57]) 
(/usr/share/texlive/texmf-dist/fonts/source/jkuserpen/ec/exiligtb.mf 
Ok)))) 
(some charht values had to be adjusted by as much as 0.09164pt) 
Font metrics written on ecbi1200.tfm. 
Output written on ecbi1200.600gf (256 characters, 62216 bytes). 
Transcript written on ecbi1200.log. 
mktexpk: /tmp/texfonts/pk/ljfour/jkuserpen/ec/ecbi1200.600pk: successfully generated. 
(see the transcript file for additional information) </tmp/texfonts/pk/ljfour/j 
kuserpen/ec/ecbi1200.600pk> 
kpathsea: Running mktexpk --mfmode/--bdpi 600 --mag 0+525/600 --dpi 525 ectt0800 
mktexpk: Running mf-nowin -progname=mf \mode:=ljfour; mag:=0+525/600; nonstopmode; input ectt0800 
This is METAFONT, Version 2.718281 (TeX Live 2013/Debian) 

(/usr/share/texlive/texmf-dist/fonts/source/jkuserpen/ec/ecrm1200.mf 
(/usr/share/texlive/texmf-dist/fonts/source/jkuserpen/ec/exbase.mf) 
(/usr/share/texlive/texmf-dist/fonts/source/jkuserpen/ec/ecrm.mf 
(/usr/share/texlive/texmf-dist/fonts/source/jkuserpen/ec/exroman.mf 
Ok (/usr/share/texlive/texmf-dist/fonts/source/jkuserpen/ec/exaccess.mf 
Ok) (/usr/share/texlive/texmf-dist/fonts/source/jkuserpen/ec/expseudo.mf 
Ok) (/usr/share/texlive/texmf-dist/fonts/source/jkuserpen/ec/exruwest.mf 
Ok [192] [193] [194] [195] [196] [197] [198] [199] [200] [201] [202] [203] 
[204] [205] [206] [207] [208] [209] [210] [211] [212] [213] [214] [215] 
[216] [217] [218] [219] [220] [221] [222] [223]) 
(/usr/share/texlive/texmf-dist/fonts/source/jkuserpen/ec/exrlwest.mf 
Ok [224] [225] [226] [227] [228] [229] [230] [231] [232] [233] [234] [235] 
[236] [237] [238] [239] [240] [241] [242] [243] [244] [245] [246] [247] 
[248] [249] [250] [251] [252] [253] [254] [255]) 
(/usr/share/texlive/texmf-dist/fonts/source/jkuserpen/ec/exrueast.mf 
Ok [128] [129] [130] [131] [132] [133] [134] [135] [136] [137] [138] [139] 
[140] [141] [142] [143] [144] [145] [146] [147] [148] [149] [150] [151] 
[152] [153] [154] [155] [156] [157]) 
(/usr/share/texlive/texmf-dist/fonts/source/jkuserpen/ec/exrleast.mf 
Ok [158] [160] [161] [162] [163] [164] [165] [166] [167] [168] [169] [170] 
[171] [172] [173] [174] [175] [176] [177] [178] [179] [180] [181] [182] 
[183] [184] [185] [186] [187] [188]) 
(/usr/share/texlive/texmf-dist/fonts/source/jkuserpen/ec/exbraces.mf 
Ok [94] [126] [23] [40] [41] [60] [124] [62] [91] [93] [92] [123] [125] 
[95] [127] [32]) 
(/usr/share/texlive/texmf-dist/fonts/source/jkuserpen/ec/expunct.mf 
Ok [14] [15] [19] [20] [13] [18] [33] [39] [42] [43] [44] [46] [47] [58] 
[59] [61] [96] [189] [17] [45] [16] [21] [22]) 
(/usr/share/texlive/texmf-dist/fonts/source/jkuserpen/ec/exaccent.mf 
Ok [0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12]) 
(/usr/share/texlive/texmf-dist/fonts/source/jkuserpen/ec/exsign.mf 
Ok [24] [34] [35] [36] [37] [64] [191] [159]) 
(/usr/share/texlive/texmf-dist/fonts/source/jkuserpen/ec/exrlig.mf 
Ok [25] [26] [28] [27] [29] [30] [31]) 
(/usr/share/texlive/texmf-dist/fonts/source/jkuserpen/ec/exromp.mf 
Ok [38] [63] [190]) 
(/usr/share/texlive/texmf-dist/fonts/source/jkuserpen/ec/exrulett.mf 
Ok [65] [66] [67] [68] [69] [70] [71] [72] [73] [74] [75] [76] [77] [78] 
[79] [80] [81] [82] [83] [84] [85] [86] [87] [88] [89] [90]) 
(/usr/share/texlive/texmf-dist/fonts/source/jkuserpen/ec/exrllett.mf 
Ok [97] [98] [99] [100] [101] [102] [103] [104] [105] [106] [107] [108] 
[109] [110] [111] [112] [113] [114] [115] [116] [117] [118] [119] [120] 
[121] [122]) 
(/usr/share/texlive/texmf-dist/fonts/source/jkuserpen/ec/exrdigit.mf 
Ok [48] [49] [50] [51] [52] [53] [54] [55] [56] [57]) 
(/usr/share/texlive/texmf-dist/fonts/source/jkuserpen/ec/exrligtb.mf 
Ok)))) 
(some charht values had to be adjusted by as much as 0.07143pt) 
Font metrics written on ecrm1200.tfm. 
Output written on ecrm1200.600gf (256 characters, 60320 bytes). 
Transcript written on ecrm1200.log. 
mktexpk: /tmp/texfonts/pk/ljfour/jkuserpen/ec/ecrm1200.600pk: successfully generated. 
</tmp/texfonts/pk/ljfour/jkuserpen/ec/ecrm1200.600pk> 
kpathsea: Running mktexpk --mfmode/--bdpi 600 --mag 1+0/600 --dpi 600 ecrm1728 
mktexpk: Running mf-nowin -progname=mf \mode:=ljfour; mag:=1+0/600; nonstopmode; input ecrm1728 
This is METAFONT, Version 2.718281 (TeX Live 2013/Debian) 

(/usr/share/texlive/texmf-dist/fonts/source/jkuserpen/ec/ecrm1728.mf 
(/usr/share/texlive/texmf-dist/fonts/source/jkuserpen/ec/exbase.mf) 
(/usr/share/texlive/texmf-dist/fonts/source/jkuserpen/ec/ecrm.mf 
(/usr/share/texlive/texmf-dist/fonts/source/jkuserpen/ec/exroman.mf 
Ok (/usr/share/texlive/texmf-dist/fonts/source/jkuserpen/ec/exaccess.mf 
Ok) (/usr/share/texlive/texmf-dist/fonts/source/jkuserpen/ec/expseudo.mf 
Ok) (/usr/share/texlive/texmf-dist/fonts/source/jkuserpen/ec/exruwest.mf 
Ok [192] [193] [194] [195] [196] [197] [198] [199] [200] [201] [202] [203] 
[204] [205] [206] [207] [208] [209] [210] [211] [212] [213] [214] [215] 
[216] [217] [218] [219] [220] [221] [222] [223]) 
(/usr/share/texlive/texmf-dist/fonts/source/jkuserpen/ec/exrlwest.mf 
Ok [224] [225] [226] [227] [228] [229] [230] [231] [232] [233] [234] [235] 
[236] [237] [238] [239] [240] [241] [242] [243] [244] [245] [246] [247] 
[248] [249] [250] [251] [252] [253] [254] [255]) 
(/usr/share/texlive/texmf-dist/fonts/source/jkuserpen/ec/exrueast.mf 
Ok [128] [129] [130] [131] [132] [133] [134] [135] [136] [137] [138] [139] 
[140] [141] [142] [143] [144] [145] [146] [147] [148] [149] [150] [151] 
[152] [153] [154] [155] [156] [157]) 
(/usr/share/texlive/texmf-dist/fonts/source/jkuserpen/ec/exrleast.mf 
Ok [158] [160] [161] [162] [163] [164] [165] [166] [167] [168] [169] [170] 
[171] [172] [173] [174] [175] [176] [177] [178] [179] [180] [181] [182] 
[183] [184] [185] [186] [187] [188]) 
(/usr/share/texlive/texmf-dist/fonts/source/jkuserpen/ec/exbraces.mf 
Ok [94] [126] [23] [40] [41] [60] [124] [62] [91] [93] [92] [123] [125] 
[95] [127] [32]) 
(/usr/share/texlive/texmf-dist/fonts/source/jkuserpen/ec/expunct.mf 
Ok [14] [15] [19] [20] [13] [18] [33] [39] [42] [43] [44] [46] [47] [58] 
[59] [61] [96] [189] [17] [45] [16] [21] [22]) 
(/usr/share/texlive/texmf-dist/fonts/source/jkuserpen/ec/exaccent.mf 
Ok [0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12]) 
(/usr/share/texlive/texmf-dist/fonts/source/jkuserpen/ec/exsign.mf 
Ok [24] [34] [35] [36] [37] [64] [191] [159]) 
(/usr/share/texlive/texmf-dist/fonts/source/jkuserpen/ec/exrlig.mf 
Ok [25] [26] [28] [27] [29] [30] [31]) 
(/usr/share/texlive/texmf-dist/fonts/source/jkuserpen/ec/exromp.mf 
Ok [38] [63] [190]) 
(/usr/share/texlive/texmf-dist/fonts/source/jkuserpen/ec/exrulett.mf 
Ok [65] [66] [67] [68] [69] [70] [71] [72] [73] [74] [75] [76] [77] [78] 
[79] [80] [81] [82] [83] [84] [85] [86] [87] [88] [89] [90]) 
(/usr/share/texlive/texmf-dist/fonts/source/jkuserpen/ec/exrllett.mf 
Ok [97] [98] [99] [100] [101] [102] [103] [104] [105] [106] [107] [108] 
[109] [110] [111] [112] [113] [114] [115] [116] [117] [118] [119] [120] 
[121] [122]) 
(/usr/share/texlive/texmf-dist/fonts/source/jkuserpen/ec/exrdigit.mf 
Ok [48] [49] [50] [51] [52] [53] [54] [55] [56] [57]) 
(/usr/share/texlive/texmf-dist/fonts/source/jkuserpen/ec/exrligtb.mf 
Ok)))) 
(some charht values had to be adjusted by as much as 0.0972pt) 
Font metrics written on ecrm1728.tfm. 
Output written on ecrm1728.600gf (256 characters, 84608 bytes). 
Transcript written on ecrm1728.log. 
mktexpk: /tmp/texfonts/pk/ljfour/jkuserpen/ec/ecrm1728.600pk: successfully generated. 
</tmp/texfonts/pk/lj 
four/jkuserpen/ec/ecrm1728.600pk></usr/share/texlive/texmf-dist/fonts/type1/publ 
ic/amsfonts/cm/cmmi10.pfb></usr/share/texlive/texmf-dist/fonts/type1/public/ams 
fonts/cm/cmsy10.pfb></usr/share/texlive/texmf-dist/fonts/type1/public/amsfonts/ 
cm/cmsy9.pfb> 
Output written on GettingStarted.pdf (30 pages, 282962 bytes). 
Transcript written on GettingStarted.log. 
mv: cannot stat ‘GettingStarted_inst_Project_usb_Bridge.pdf’: No such file or directory 
mv: cannot stat ‘GettingToUse.pdf’: No such file or directory 
mv: cannot stat ‘DriverGettingStarted.pdf’: No such file or directory 
mv: cannot stat ‘RaspberryPiGettingStarted.pdf’: No such file or directory 
mv: cannot stat ‘instGettingStarted.pdf’: No such file or directory 
make: *** [GettingStarted_inst_Project_usb_Bridge.pdf] Error 1 
[email protected]:~/Desktop/Project/Docs$ 

看起來我就像.PHONY: all all: ${TEX_PDF}線不生產我想要的行爲,但對我來說,主要的問題是依然; 只有第一個文件被處理。

我該如何讓目標及其規則列表遍歷整個文件列表?

修訂

現在幾乎是固定的,但問題是與${TEX_PDF}的依賴關係。

現在正在製作所有文件,但依賴性計算無法正常工作。

刪除${TEX_IN}並將其留空,並更改規則內引用依賴項的方式(使用目標名稱($ @)並替換擴展名)使其適用於單次運行。

將依賴關係更改爲$(TEX_DIR)/$(@:.pdf=.tex)會導致它使每個文件都運行。

爲了方便起見,我添加了一行來清理自動生成的文件(.out,.log,.toc和.aux)pdflatex。如果不需要,可以對其進行編輯或刪除。

rwildcard=${foreach d,${wildcard $1*},${call rwildcard,$d/,$2} ${filter ${subst *,%,$2},$d}} 

TEX_DIR=TeX # Sub-folder containing TEX files 
TEX_SRCS_IN = ${call rwildcard, ${TEX_DIR}/, *.tex} # 'TEX' List with paths 
TEX_PDF_IN = ${foreach a, ${TEX_SRCS_IN}, ${a:.tex=.pdf} } # 'PDF' List with paths 
TEX_PDF = $(TEX_PDF_IN:$(TEX_DIR)/%=%) # 'PDF' List without paths 


.PHONY: all 
all: ${TEX_PDF} 

${TEX_PDF} : $(TEX_DIR)/$(@:.pdf=.tex) 
    cd ${TEX_DIR} && \ 
    pdflatex $(@:.pdf=.tex) && \ 
    rm $(@:.pdf=.out) $(@:.pdf=.log) $(@:.pdf=.toc) $(@:.pdf=.aux) && \ 
    cd ../ && \ 
    mv $(TEX_DIR)/[email protected] . 

回答

1

最後修復。按照我的意圖工作。

將目標定義更改爲通用形式%.pdf,其依賴性定義類似,但在子文件夾${TEX_DIR}/%.tex中。使用NO-OP命令添加了依賴項的目標/規則。

# Usage: 
# From the ./Docs folder 
# 
# Scan the TeX folder and make all necessary PDF's 
#   make -f Makefile 
# 
# Make a specific TEX file 
#    make -f Makefile TEX_SRCS_IN=<filename>.tex 
# 
# 
rwildcard=${foreach d,${wildcard $1*},${call rwildcard,$d/,$2} ${filter ${subst *,%,$2},$d}} 

TEX_DIR=TeX # Sub-folder containing TEX files 
TEX_SRCS_IN = ${call rwildcard, ${TEX_DIR}/, *.tex} # 'TEX' List with paths 
TEX_PDF_IN = ${foreach a, ${TEX_SRCS_IN}, ${a:.tex=.pdf} } # 'PDF' List with paths 
TEX_PDF = $(TEX_PDF_IN:$(TEX_DIR)/%=%) # 'PDF' List without paths 


.PHONY: all 
all: ${TEX_PDF} 

%.pdf : ${TEX_DIR}/%.tex 
    cd ${TEX_DIR} && \ 
    pdflatex $(@:.pdf=.tex) && \ 
    rm $(@:.pdf=.out) $(@:.pdf=.log) $(@:.pdf=.toc) $(@:.pdf=.aux) && \ 
    cd ../ && \ 
    mv $(TEX_DIR)/[email protected] . 

${TEX_DIR}/%.tex: 
    @: 
1

這可能是關於make的最常見的三個問題之一。當你運行沒有參數的make時,它只會生成makefile中列出的第一個目標。如果您希望它構建多個目標,則需要在makefile的開頭放置一個新目標,該目標取決於您要構建的其他目標。

所以,第一個目標之前加入這一行:

.PHONY: all 
all: ${TEX_PDF} 

ETA:

只有第一個文件進行處理,因爲該處理的最終結果的第一個文件是失敗的:make: *** [GettingStarted_inst_Project_usb_Bridge.pdf] Error 1。默認情況下,make會在第一次失敗後停止,並且不會再構建任何東西。如果你想繼續下去,你可以運行make -k

但是,我建議你修復你的失敗,然後它會繼續。

的問題是你的規則,你說的結尾:

mv $(TEX_DIR)/${TEX_PDF} . 

TEX_PDF包含文件的列表,所以這種擴大到(因爲你可以看到從輸出):

mv TeX/GettingStarted.pdf GettingStarted_inst_Project_usb_Bridge.pdf GettingToUse.pdf DriverGettingStarted.pdf RaspberryPiGettingStarted.pdf instGettingStarted.pdf . 

這顯然不是你想要的。您只想移動您創建的一個文件,該文件作爲自動變量[email protected]提供給您。

+0

我已經添加了幾行。他們不會產生我需要的行爲,所以我將他們從我原來的帖子中刪除,因爲我一直在想,由於$(TEX_PDF)是一個文件列表,我並行定義了我的目標(如%.o:%。 cpp關係但列舉)。 – gone

+0

Thnx MadScientist。我終於找到了實現我想要的方式。不太確定這是否是最好的方法,但它的工作。 'make -p'真的很方便。這是我做的第一個* Make *文件。我習慣於讓我的IDE處理所有這些事情。 – gone