我有一个脚本(语言是VBScript,但为了问题,它不重要),它被用作许多其他脚本的基础 - 称之为“基本脚本”或“包装脚本”为他人。我想模块化我的存储库,以便这个基本脚本可以与特定脚本实例独有的功能组合,然后在两者中的任何一个更改之后重建。
示例:
baseScript.vbs
- 记录,报告和其他通用功能。
queryServerFunctions.vbs
- 具有依赖baseScript.vbs
中的函数的特定,唯一任务(函数)的脚本。
我想使用make
将两个(或任意数量的文件与脚本片段)合并到一个脚本中 - 比如queryServer.vbs
- 这是完全自包含的。然后,只要其源脚本发生任何更改,就可以通过make
重建此自包含脚本。
那么问题是:我可以使用make
来管理脚本构建吗?如果是,那么这样做的最佳或首选方式是什么?
如果重要,我的脚本环境是在Windows 7 x64上运行的Cygwin。
答案 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
会更合适。