While I'm certainly under no illusions that building software without an IDE is possible, I don't actually know much about doing it well. I've been using graphical tools like Visual Studio or Code::Blocks so long that I'm pretty well lost without them.

And that really stinks when I want to change environments or languages. I couldn't really do anything in D until someone made a Visual Studio plugin, and now that I'm trying to do more development on Mac, I can't use D again because the XCode plugins don't work.

I'm sick of being lost when I see a .make file and having no idea what I'm supposed to do with a folder full of source files. People can't be compiling them one by one using the console and then linking them one by one. You'd spend more time typing file names than code. So what are the automation and productivity tools of the non-IDE user? How do you manage a project when you're writing all the code in emacs or vim or nano or whatever?

I would love it if there was a book or a guide online that spells some of this out.

  • well, you just type more, or use some auto complete macros. That's all – BЈовић Mar 26 '12 at 21:29
  • 2
    There are automated build tools for a variety of technologies. Java has Maven/Buildr/Ant, the Microsoft family has MSBuild (and nmake...), there are CMake, SCons, Rake, Z.Buildout (Python), and classic Make (also tied in with autotools like autoconf, automake, autogen). Scons is pretty generic and simple to learn if you want something easy to pick up. – wkl Mar 26 '12 at 21:41
  • 2
    The purpose of a make file is to automate the order of compilation and compiler options. – Usagi Mar 26 '12 at 21:46
  • I guess that you need to prepare several scripts, one for each component you try to build. While developing, you just run the relevant script, maybe pass a text file as an input of files that the script needs to use and that is it. You need to be very organized and coding those scripts will help you achieve that. – NoChance Mar 27 '12 at 0:59
  • Looking at it now, I'm guessing this question was a bit too general, but I wasn't fully aware of what I needed to ask at the time. The keywords here are "build tool" and "tool chain", which can be fairly language specific in most cases. Regardless, this question did lead me to SCons, which is perfect for my needs, and a generally better understanding of where make fits into the build environment and what similar tools exist. – CodexArcanum Mar 28 '12 at 14:37

Okay most large build systems are scripted with command line tools or specialized tools. I have used make, nmake, ant, nant, perl, python, bash and batch files. I have also used specialized tools like Visual Build and Final Builder to produce builds for production systems. Tool chains are different for each environment.

Make is the grandfather of most commandline build tool chains and it does have a book from O'Reilly: http://shop.oreilly.com/product/9780596006105.do

You should consider O'Relly's Unix in a Nutshell 4th Edition as it touches on Unix and (by extension the GNU tool chain) commandline tool chains for builds: http://shop.oreilly.com/product/9780596100292.do

Also consider more general material in the search for tools chain understanding. The Build Master by Vincent Maraia: http://www.amazon.com/The-Build-Master-Microsofts-Configuration/dp/0321332059 Vincent Maraia book chapter 5 touches build chains and the whole book is touches on the whole software configuration environment.

A more recent book for a "modern" holistic approach look at Continuous Delivery by Jez Humble and David Farley ( http://www.amazon.com/Continuous-Delivery-Deployment-Automation-Addison-Wesley/dp/0321601912 )

The Window tool chain is a little different using MSBuid in present versions for the command line so Look at the Microsoft press book http://www.amazon.com/Inside-Microsoft®-Build-Engine-Pro-Developer/dp/0735626286

I have all books I recommended except the MSBuild book ( And I do plan to get it )

Also the java commandline tool chain is yet a third command-line tool chain and it is documented several books on Java. Ant and Mavin are useful in scripting java builds (and have been extended to do other types of builds as well) a book on Ant I have is Ant the Definitive Guide 2nd Edition ( http://shop.oreilly.com/product/9780596006099.do ) but it is a bit dated.

| improve this answer | |
  • Ah, perfect! That's just the kind of thing I was hoping for, some general advice and guidance on tool chains and automated builds. Thank you! – CodexArcanum Mar 28 '12 at 14:41

Typically each OS and framework has it's own preferred way to build things. Linux uses various flavors of make, Java has ANT and MAVIN, QT has QMake, to name a small number of the ones out there.

Your problem is likely that you have yet to learn how build tools work under the bonnet- even your Microsoft IDE has a complex build control system that revolves around a list of files, dependencies and what to do with them.

I would suggest starting with the basics of the ubiquitous Make. It's been around so long a variation is available on every platform. It's not the best for 2012, difficult to use ( and rarely used ) properly and has a steep learning curve. Once you have "mastered" a simple make file containing a couple of files, extend it to include building a library of a couple and linking to that library. Don't go much further.

Then have a look at more modern replacements such as ANT and SCons.

Once you have grasped the ideas of these tools, you will be able to get a simple project off the ground on any OS/Framework quite quickly. Don't get discouraged - there are teams of people in large software houses whose sole job is this kind of thing.

Another option is a portable IDE such as Eclipse where these things are largely dealt with for you. However at some time in you career, you will benefit if you learn whats happening behind the scenes.

| improve this answer | |
  • I'm actually somewhat familiar with MSBuild and Nant, having toyed with them a bit on previous projects, but somehow hadn't made the full jump to looking for that class of tools in general. I also got caught up in the need to manually set up other tools like a debugger, or to automatically organize source files into projects (generally an IDE thing). I appreciate the advice though, and like the general nature of your answer, as befits the general nature of my question. – CodexArcanum Mar 28 '12 at 14:40

There was a recent HackerNews post on using the Unix/Linux shell and its many tools as an IDE. Another post spoke of using a combination of Vim and tmux to get the goodies that an IDE brings.

Installing tmux on Mac should be easy with Macports. Here is the Vim + tmux link. ATM, the other link eludes me. It should be easy with Google, I hope.

I think you would need to learn to read and write Makefile fluently, from what you say in the question.

| improve this answer | |
  • 1
    Not sure what you mean by "fluently". Using make is easy, using it properly is hard - a very small number of people "get" how make really works, most hack around until something useful happens (me included). That said, adding and moving files is easy enough to do, and you should learn the basics. – mattnz Mar 26 '12 at 23:06
  • Fluently was to mean, read and understand a Makefile, and, to write one as needed. How is it achieved? You have listed out one method yourself. – vpit3833 Mar 27 '12 at 0:08

Not the answer you're looking for? Browse other questions tagged or ask your own question.