## Handy Makefile

The following is a snippet for a handy and concise Makefile that will make executables for all C files in a directory.  It’s good for “sandboxing” this illustrates some of Make’s useful features without before consulting a larger resource.  Tip of the hat to Erik for helping me polish it up.

```# Flags for gcc
FLAGS = -D_GNU_SOURCE -O3 -g

# All C files as sources, and chop off the .c for targets
SOURCES = \$(wildcard *.c)

TARGETS = \$(patsubst %.c, %, \$(SOURCES))

all: \$(TARGETS)

# All targets without an extension depend on their .c files
%: %.c
@echo "Building \$@"
@gcc \$(FLAGS) \$< -o \$@

# The "@" symbol suppresses Make actually displaying the command.

clean:
@echo "Removing hidden files"
@rm -rf .*.swp *.dSYM ._* 2> /dev/null
@echo "Removing executables"
@rm -rf \$(TARGETS)        2> /dev/null```

The nice thing about Make is that it’s useful not only for things like C code. I’ve even used it (quite some time ago) to piece together tracks of music using ecasound.

## MacBook and 64 bit address spaces

I occasionally like to show off how I can do some pretty sophisticated calculations and experiments right on my Macbook. For these tasks, over-speced machines and special purpose hardware are sometimes assumed to be the right solution, but a judicious use of the resources on a MacBook may get the job done in a similar time.

One thing that would be nice is if the OS actually supported 64 bit address spaces (after all, the Core 2 Duo processor is a 64 bit one).  This comes in handy when one wants to mmap large files (e.g. greater than a few gigabytes).  On 32-bit architectures, the address space is limited by the word size (in this case $2^{32}$ bits or about 4 GB of space and even less-so with kernel limitations).

Supposedly the next version of OS X will have support for this (and will come on the MacBook Pro installations, but I assume not the MacBook).