When should a developer move from using the default build capability of their IDE to writing and using custom build scripts?
I realize this is subjective and I am interested in hearing all opinions; hence the community wiki.
When should a developer move from using the default build capability of their IDE to writing and using custom build scripts?
I realize this is subjective and I am interested in hearing all opinions; hence the community wiki.
Well it also depends on what IDE you're using, what language and to a limited extent what operating system(s).
For example, in Java it is common to use Ant or Maven scripts that can be used in both the IDEs and as separate build processes. In PHP however there is typically no build process so something like Git can be used to push changes to a deployment server (manually or automatically).
As for when, the more of these that are true the more likely you'll need it:
Basically an automated build process is required when you want or need a continuous integration process. It's useful to see automatically if someone has broken the build ("but it works on my PC!") or not, if nothing else.
It's simple, when the IDE build system does not meet your requirements anymore. For example when you need a continuous integration.
There is some irony in such a common situation: you want to move to a script-based build to automate building, but in so doing you usually lose one great automation feature of your IDE, i.e. automatic dependency tracking. That is for me the main reason to no more check each new script-based build tool that appears on the scene.
Probably I am not up-to-date and some new tool has finally this feature (I will be glad to know such tools), but I only know of a single one that do this for C source programs, Clump. An interesting quote from its home page:
... I have long realized that the information in a makefile is largely redundant anyway -- almost all the necessary information to create a makefile already exists right in the .c and .h files themselves. Any extra information needed can easily be specified in a separate little configuration file. ...
P.S.: no, Automake does not seems to have a level of automation comparable to IDEs and Clump.
I've used a few main build systems in the last few years
Ant, with or without an IDE, for Java on Windows, Linux, OS X
Visual Studio for C++ on Windows
GNU make for C or C++ on Linux, Windows and Solaris ( and IIRC Java early on )
Earlier in my career, I used JBuilder and Symantec VisualCafe, Turbo C++, Turbo Pascal, each of which had their own build system. Their IDE specific build processes are now extinct. I'v been on a few long running projects which had to change their builds as IDEs were replaced; using an independent build script means you don't have to ( the exception is Visual Studio, which has always been pretty good at backwards compatibility ).
In the languages I use, modern IDEs which either give a scripted build option or a use a script based tool. I move C and Java between platforms, so tend to use portable build tools for those.
You should support both, from the beginning, because they fullfill different roles:
The idea is that as soon as you check in some code, it is validated using the master build system: you give your developers the freedom to choose their tool but still enforcing a common build system.