使用GNU Make for Script构建

时间:2011-11-15 21:29:44

标签: scripting vbscript makefile

我有一个脚本(语言是VBScript,但为了问题,它不重要),它被用作许多其他脚本的基础 - 称之为“基本脚本”或“包装脚本”为他人。我想模块化我的存储库,以便这个基本脚本可以与特定脚本实例独有的功能组合,然后在两者中的任何一个更改之后重建。

示例:

  • baseScript.vbs - 记录,报告和其他通用功能。

  • queryServerFunctions.vbs - 具有依赖baseScript.vbs中的函数的特定,唯一任务(函数)的脚本。

我想使用make将两个(或任意数量的文件与脚本片段)合并到一个脚本中 - 比如queryServer.vbs - 这是完全自包含的。然后,只要其源脚本发生任何更改,就可以通过make重建此自包含脚本。

那么问题是:我可以使用make来管理脚本构建吗?如果是,那么这样做的最佳或首选方式是什么?

如果重要,我的脚本环境是在Windows 7 x64上运行的Cygwin。

1 个答案:

答案 0 :(得分: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 $+ > $@
# 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

会更合适。