[kwlug-disc] Makefiles [was: command prompt history]

unsolicited unsolicited at swiz.ca
Fri Mar 19 23:46:52 EDT 2010

Bob Jonkman wrote, On 03/17/2010 6:47 PM:
> Chris Frey wrote:
>> On Wed, Mar 17, 2010 at 12:17:45AM -0400, Bob Jonkman wrote:
>>> Urm, no.  Not everyone.  At most, everyone - 1.  That would be me.  
>>> Care to explain?  At a KWLUG meeting?
>> I don't want to assume, so are you asking how makefiles in general
>> work, or why they would be useful here?
>> - Chris
> Yes.


> --Bob (who believes less is more, and that being brief will encourage a 
> comprehensive lecture series both on how makefiles in general work, and 
> why they would be useful here)

OK, I'll take a quick stab, and probably be killed for it, but ...

In essence, make (attempts to) make a {something}. Or to make sure the 
result (usually a 'target') is not older than its dependents (the 
things that usually are supposed to be inputs or components to a 

So, you specify a (target) [thing to look for a see if it's older than 
any of the dependents] and {dependents} [things that if newer, run the 
commands specified to refresh the target], and a set of commands that 
cause the target to be refreshed.

So, if you have a production directory (target), and a working 
directory (dependents), you specify a 'cp {appropriate options} olddir 
newdir' as your command to run. And type 'make'. Modify a file, type 
make, repeat.

Suppose your commands don't make a result. In essence, typing 'make' 
is akin to having written a script. It will run every time - the 
result is always out of date - it never gets created.

The target can be a placeholder, and the command to update a result 
could simply be 'touch {result}'.

Traditionally, the result is an executable, and the source, well, 
source, and the commands are various 'cc' commands that translate the 
source into the executable. But the essential idea of 'make' is so 
darn useful, that make is used far more widely than just that any 
more. (Take printing a book from component input chapters, for 
example.) And become far more potentially complex and weird, as a 
result. Including substitution variables and lots of other stuff. But 
taken back to basics ... you get people saying 'I use make for that.'

And that's about the extent of my (Linux) make knowledge. And clear as 
mud, I know.

So, I've taken a stab, the flames can begin.

More information about the kwlug-disc mailing list