2011-11-15 111 views
0

我有一個腳本(語言是VBScript,但爲了這個問題,它不重要),它被用作許多其他腳本的基礎 - 將其稱爲「基本腳本「或」包裝腳本「供他人使用。我想模塊化我的存儲庫,以便這個基本腳本可以與特定腳本實例獨有的功能組合,然後在以後重建,如果兩者中的任何一個發生變化。使用GNU Make編寫腳本

實施例:

  • baseScript.vbs

    - 日誌,報告和其它通用功能。

  • queryServerFunctions.vbs - 一個具有特定,獨特任務(函數)的腳本,這些任務取決於baseScript.vbs中的函數。

我想用make兩個(或文件與腳本片段任意數字)合併成一個腳本 - 也就是說,queryServer.vbs - 這是完全獨立的。隨時可以通過make重新構建此獨立腳本,無論其源腳本是否更改。

那麼問題是:我可以使用make來管理腳本構建,如果是這樣,那麼最佳或首選的方法是什麼?

如果很重要,我的腳本環境是在Windows 7 x64上運行的Cygwin。

回答

0

VBScript和GNU make的結合是不尋常的,所以我懷疑你會找到這樣做的「首選方式」。這當然是可能的。以你的榜樣,並添加名爲fooServer.vbs顯示解決方案如何爲多個腳本另一個腳本,這裏有一個簡單的makefile:

# list all possible outputs here 
OUTPUT := queryServer.vbs fooServer.vbs 

# tell make that the default action should be to produce all outputs 
.PHONY: all 
all: $(OUTPUT) 

# generic recipe for combining scripts together 
$(OUTPUT): 
     cat $+ > [email protected] 
# note: The first character on the line above should be a tab, not a space 

# now we describe the inputs for each output file 
queryServer.vbs: baseScript.vbs queryServerFunctions.vbs 
fooServer.vbs: baseScript.vbs fooFunctions.vbs 

將創建兩個腳本爲你從他們的投入,如果你摸,爲例如queryServerFunctions.vbs然後只有queryServer.vbs將被重新制作。

爲什麼要去那麼多麻煩?

make的目的是通過比較文件時間戳來判斷何時可以安全地跳過構建步驟,因爲自上次更新輸出文件以來輸入未發生變化,從而有效地「重建」事物。假設構建步驟很昂貴,所以在可能的情況下值得跳過這些步驟,並且由於makefile中的錯誤或誤導性的文件時間戳,性能增益值得冒太多的風險。

周邊複製幾個小文件時,我會說喜歡

copy /y baseScript.vbs+queryServerFunctions.vbs queryServer.vbs 
copy /y baseScript.vbs+fooServerFunctions.vbs fooServer.vbs 

一個簡單的批處理文件將是一個更好的選擇。

+0

謝謝您的詳細回覆。我很好奇,如果'make'能夠完成比簡單連接更復雜的操作;我知道它主要是爲編譯語言設計的,但我想知道是否可能以比a.vbs + b.vbs = c.vbs更復雜的方式交錯文件 - 也許包含或類似的東西。 – treehead

+0

'make'本身無法做到這一點:它旨在驅動其他對文件進行操作的程序(歷史上稱爲C編譯器)。在我的例子中,它駕駛的程序是'貓'。 – slowdog

+0

你可以用更復雜的東西替換makefile中的'cat':也許是另一個VBScript,或者,爲了最大的奇怪,C預處理器:'cat $ + | gcc -E-> $ @'可以讓你在輸入文件中使用像'#include'這樣的命令。但是,除非這些轉換得到*非常昂貴,否則我會堅持使用一個簡單的批處理文件或腳本。 – slowdog