Closed andreasabel closed 6 years ago
After the change, bnfc
will recreate all its targets. If no change has occurred, the old .bak
files will be preserved. In summary, the only change is that the targets will always get the current timestamp.
Maybe the motivation for the present behavior was that bnfc
should have some make
functionality itself. But since it does not go all the way to the end, like calling lexer and parser generators, it was only going halfway and would not integrate with make
.
bnfc
has its own logic of preserving unchanged files that makes it incompatible withmake
. GNUmake
expects a target to get the current time stamp if the action is run that creates it or refreshes it from its dependencies. Sincebnfc
is "clever" and does not recreate unchanged files, it will be called every time bymake
should there be any target older than the.cf
file.This contradicts the principle that
make
should be idempotent. More precisely, the second call tomake
in a row should reportnothing to do
for a properly writtenMakefile
.