Button: A fast, correct, and elegantly simple build system.
Jason White via Digitalmars-d-announce
digitalmars-d-announce at puremagic.com
Tue Jun 14 22:04:28 PDT 2016
On Tuesday, 14 June 2016 at 10:47:58 UTC, Fool wrote:
> Switching the compiler version seems to be a valid use case.
> You might have other means to detect this, though.
If you want to depend on the compiler version, then you can add a
dependency on the compiler executable. It might be a good idea to
have Button do this automatically for every command. That is,
finding the path to the command's executable and making it a
dependency.
> A possible use case is creating object files first and packing
> them into a library as a second step. Then single object files
> are of not much interest anymore. Imagine, you want to
> distribute a build to several development machines such that
> their local build environments are convinced that the build is
> up to date. If object files can be treated as secondary or
> intermediate targets you can save lots of unnecessary network
> traffic and storage.
You're right, that is a valid use case. In my day job, we have
builds that produce 60+ GB of object files. It would be wasteful
to distribute all that to development machines.
However, I can think of another scenario where it would just as
well be incorrect behavior: Linking an executable and then
running tests on it. The executable could then be seen by the
build system as the "secondary" or "intermediate" output. If it
gets deleted, I think we'd want it rebuilt.
I'm not sure how Make or Shake implement this without doing it
incorrectly in certain scenarios. There would need to be a way to
differentiate between necessary and unnecessary outputs. I'll
have to think about this more.
More information about the Digitalmars-d-announce
mailing list