我需要确保在更改其中一个文件时始终运行对大量文件进行操作的自定义构建工具。
我知道您可以为自定义构建工具指定“附加依赖项”,但有没有比每行指定一个文件更好的方法?
我需要确保在更改其中一个文件时始终运行对大量文件进行操作的自定义构建工具。
我知道您可以为自定义构建工具指定“附加依赖项”,但有没有比每行指定一个文件更好的方法?
刚刚使构建工具依赖于一个文件。创建了另一个在它之前运行的自定义构建工具,如果任何真正的依赖关系发生了变化,它会触及这个文件。优点是我现在有很大的灵活性,如果依赖关系发生变化,我不需要更改任何项目设置——这是通过新的自定义构建工具访问的数据库来处理的。
“附加依赖项”是正确且唯一记录的方式。您可以使用外部工具为项目文件中的构建工具调整此字段的内容,以省去复制粘贴和错字调整的麻烦。
它不会那么可靠,但您可以将所有文件放在一个子文件夹中,然后将该文件夹设为依赖项。
一点小技巧:
(1) 将依赖文件分组到一个单独的文件夹中
(2) 创建一个 jscript 文件detect.js
如下:
var output = WScript.arguments(0);
var folder = WScript.arguments(1);
var fso = new ActiveXObject("Scripting.FileSystemObject");
var objOutput = fso.GetFile(output);
var objFolder = fso.GetFolder(folder);
// if the output file is older than input folder,
// delete output file to force regenerate
if (objOutput.DateLastModified < objFolder.DateLastModified) {
fso.DeleteFile(objOutput);
} else {
// if the output file is older than one of files in the input folder,
// delete output file to force regenerate
var e = new Enumerator(objFolder.Files);
for (; !e.atEnd(); e.moveNext()) {
if (objOutput.DateLastModified < e.item().DateLastModified)
fso.DeleteFile(objOutput);
break;
}
}
}
(2) 将命令行添加到 Pre-Build Event,如下所示:
cscript.exe /nologo detect.js $(Output) $(InputFolder)
(3) 设置Custom Buld Step来强制Pre-Build Event发生,即
Command Line: echo --------------
Outputs: echo.fake
Execute After: PreBuildEvent