2016-07-27 147 views
2

我正在使用bash並嘗試使用makefile將.ppt中的所有文件複製到.pdf,然後將它們全部添加到存檔中。這是我到目前爲止的內容如何使用makefile更改所有文件擴展名

.PHONY: all clean 

files = $(wildcard *.ppt) 

OBJ = $(patsubst %.pdf, %.ppt, $(wildcard *.ppt)) 

clean: 
     rm -f lectures.tar.gz *.pdf 

我已經制作的唯一makefile已經用於從1或2個源文件編譯程序。不知道如何處理這個問題

+0

哦,是的,你爲什麼要這樣做?爲什麼不是傳統的shell腳本?祝你好運。 – shellter

+0

@shellter我已經做了一個shell腳本。這是作業。我必須創建一個shell腳本和一個makefile,兩者完全相同,我不知道如何處理Makefile –

回答

3

make的技巧是從結束開始,用你想要創建的東西,然後向後走向開始,看看事情已經發生了什麼變化。

那麼,到底什麼是:你想製造什麼?根據你的例子,我們將推斷你想創建一個名爲lectures.tar.gz的壓縮tar文件。所以,我們需要一個目標:

lectures.tar.gz: 

什麼進入tar文件? PDF文件,而您也已經發現瞭如何計算到OBJ變量,所以那些東西必須被列爲lectures.tar.gz先決條件:

lectures.tar.gz: $(OBJ) 

什麼是該目標的祕訣是什麼?它應該創建一個包含所有文件的名稱的tar文件。一種方法是這樣的:

lectures.tar.gz: $(OBJ) 
     tar czf lectures.tar.gz $(OBJ) 

的另一種方法,使用automatic variables更通用的,應該是:

lectures.tar.gz: $(OBJ) 
     tar czf [email protected] $^ 

現在,你如何創建OBJ文件?對於每一個你需要從.ppt版本複製它。由於您使用的是GNU make(通過使用wildcard等功能可以證明),您可以使用pattern rule來實現此功能;該模式是這樣的:

%.pdf : %.ppt 
     cp $< [email protected] 

這種模式告訴make如何從任意文件X.ppt建立一個文件X.pdf,具有cp命令:在這種情況下,自動變量$<[email protected]需要,因爲你不知道名。這是一個隱含的規則,因爲名稱沒有明確列出,但由模式隱含。

現在您如何構建.ppt文件?你不這樣做,因爲它們是源文件,所以你完成了!