Надо было сразу код показать:
// generate timestamp header
Rule {
// alwaysRun: true
multiplex: true
Artifact {
filePath: product.sourceDirectory + "/System/timestamp.h"
fileTags: "hpp"
}
prepare: {
var cmd = new JavaScriptCommand();
cmd.description = "generating " + output.fileName;
cmd.sourceCode = function() {
var f = new TextFile(output.filePath, TextFile.WriteOnly);
var d = Date.now();
d = Math.floor(d / 1000); // in seconds
try {
f.writeLine("#ifndef TIMESTAMP_H");
f.writeLine("#define TIMESTAMP_H");
f.writeLine('#define TIMESTAMP ' + d)
f.writeLine("#endif");
} finally {
f.close();
}
};
return [cmd];
}
}
То есть зависимость есть (где-то в недрах модуля cpp), при отсутствии файла он создаётся, и всё корректно собирается. А вот когда он заново генерируется, я не понял.
__TIME__ не очень интересен. Препроцессором его можно порезать-пересчитать-сложить как надо, но это настолько неудобно...
Ну и проблему регулярного ребилда файла, в котором этот __TIME__ объявлен, надо как-то решать.
> автор хочет чтобы _любая_ пересборка (даже null build) апдейтила таймстемп.
Можно для любого не-null, как проще. Просто этот таймстамп хочется положить в отдельный файлик и не трогать его никогда больше.
PS парни, отдельное спасибо за моментальный ответ!