2011-11-15 8 views
0

私はスクリプトを持っています(言語はVBScriptですが、質問のために重要ではありません)。これは他の多くのスクリプトの基礎として使われています。 "、または"ラッパースクリプト "などがあります。私はリポジトリをモジュール化して、この基本スクリプトを特定のスクリプトインスタンスに固有の機能と組み合わせて、後で再構築するようにしたいと考えています。GNU Makeを使用してスクリプトをビルドする

例:

  • baseScript.vbs - ログ、レポート、およびその他の一般的な機能。

  • queryServerFunctions.vbs - baseScript.vbsの機能に依存する特定の固有のタスク(機能)を持つスクリプト。

私は、単一のスクリプトに2つ(またはスクリプトフラグメントを持つファイルの任意の数)を結合するためにmakeを使用したい - 完全に自己完結している - と言う、queryServer.vbs。この自己完結型スクリプトは、ソーススクリプトのいずれかが変更されるといつでもmakeで再構築できます。

問題は次のとおりです。makeを使用してスクリプトビルドを管理できますかもしそうなら、これを行うための最善の方法は何ですか?

私のスクリプト環境はWindows 7 x64で動作するCygwinです。

答えて

0

VBScriptとGNU makeの組み合わせは珍しいので、これを行うための「好きな方法」を見つけることはできません。確かに可能です。あなたの例を取ると、その溶液は、複数のスクリプトのためにどのように動作するかを示すためにfooServer.vbsと呼ばれる別のスクリプトを追加し、ここで簡単なメイクです:あなたが触れた場合のために、それらの入力からあなたのための2つのスクリプトを作成し、かつます

# 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の目的は、出力ファイルが最後に更新されてから入力が変更されていないため、ファイルのタイムスタンプを比較してビルドステップを安全にスキップできるかどうかを判断することによって、効率的に "再構築"することです。ビルドステップは高価なので、可能な限りスキップすることを前提としており、メークファイルのバグや誤ったファイルタイムスタンプのためにパフォーマンスを向上させることは価値があります。

周りにいくつかの小さなファイルをコピーするために、私は

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

のような単純なバッチファイルは、より良いフィットだろうと言うでしょう。

+0

詳細な返信をありがとうございます。 'make 'が単純な連結より複雑な操作をすることができるのであれば私は興味がありました。私はそれが主にコンパイル言語のために設計されていたと理解していますが、おそらくincludeや類似のものを使って、 'a.vbs + b.vbs = c.vbs'よりももっと洗練された方法でファイルをインターリーブすることが可能かどうか疑問に思っていました。 – treehead

+0

'make'自体はそれを行うことができません:これは、ファイルを操作する他のプログラム(歴史的にはCコンパイラ)を駆動するように設計されています。私の例では、そのプログラムは 'cat'です。 – slowdog

+0

makefile内の 'cat'をもっと洗練されたものに置き換えることができます:別のVBScript、おそらく最大の奇妙さのために、Cプリプロセッサ' cat $ + | gcc -E-> $ @ 'を使うと、入力ファイルに' #include 'のようなコマンドを使うことができます。しかし、これらの変換が非常に高価にならない限り、単純なバッチファイルやスクリプトを使用します。 – slowdog

関連する問題