The GCC 4.1.2 documentation has this to say about the -pipe option:
-pipe
Use pipes rather than temporary files for communication between the various stages of compilation. This fails to work on some systems where the assembler is unable to read from a pipe; but the GNU assembler has no trouble.
I assume I’d be able to tell from error message if my systems’ assemblers didn’t support pipes, so besides that issue, when does it matter whether I use that option? What factors should go into deciding to use it?
It doesn’t usually make any difference
It has + and – considerations. Historically, running the compiler and assembler simultaneously would stress RAM resources.
Gcc is small by today’s standards and
-pipeadds a bit of multi-core accessible parallel execution.But by the same token the CPU is so fast that it can create that temporary file and read it back without you even noticing. And since
-pipewas never the default mode, it occasionally acts up a little. A single developer will generally report not noticing the time difference.Now, there are some large projects out there. You can check out a single tree that will build all of Firefox, or NetBSD, or something like that, something that is really big. Something that includes all of X, say, as a minor subsystem component. You may or may not notice a difference when the job involves millions of lines of code in thousands and thousands of C files. As I’m sure you know, people normally work on only a small part of something like this at one time. But if you are a release engineer or working on a build server, or changing something in stdio.h, you may well want to build the whole system to see if you broke anything. And now, every drop of performance probably counts…