This Makefile is a fully functional sample for compiling several C sources
(here foo.c
and bar.c
) and link the resulting object files into an
executable program (here foobar
):
SOURCES = foo.c bar.c
PROGRAM = foobar
ifdef CC65_TARGET
CC = $(CC65_HOME)/bin/cl65
CFLAGS = -t $(CC65_TARGET) --create-dep $(<:.c=.d) -O
LDFLAGS = -t $(CC65_TARGET) -m $(PROGRAM).map
else
CC = gcc
CFLAGS = -MMD -MP -O
LDFLAGS = -Wl,-Map,$(PROGRAM).map
endif
########################################
.SUFFIXES:
.PHONY: all clean
all: $(PROGRAM)
ifneq ($(MAKECMDGOALS),clean)
-include $(SOURCES:.c=.d)
endif
%.o: %.c
$(CC) -c $(CFLAGS) -o $@ $<
$(PROGRAM): $(SOURCES:.c=.o)
$(CC) $(LDFLAGS) -o $@ $^
clean:
$(RM) $(SOURCES:.c=.o) $(SOURCES:.c=.d) $(PROGRAM) $(PROGRAM).map
Important: When using the sample Makefile above via copy & paste it is necessary to replace the eight spaces at the beginning of command lines (lines 26, 29 and 32) with a tab character (ASCII code 9).
Without any specific configuration the sample Makefile will compile and link
using GCC. In order to rather use cc65 the variable CC65_TARGET
needs to be
defined. This may by done as an environment variable or simply as part of the
Makefile. However to quickly switch between compilers and/or cc65 targets it is
best done on the GNU Make command line like this:
make CC65_TARGET=c64
The sample Makefile presumes the variable CC65_HOME
to point to the
directory cc65 is located in. Again there are several ways to define this
variable but as its value typically won't change often it is best done as an
environment variable. On Windows the cc65 .exe installer package takes care
of creating a CC65_HOME
environment variable.
Most parts of the sample Makefile follow the guidelines in the GNU Make Manual that can be searched online for background information. The automatic generation of dependency however rather works as described by the GNU Make maintainer Paul D. Smith in Advanced Auto-Dependencies. Fortunately both GCC and cc65 directly support this method in the meantime.
The recommended way to use GNU Make on Windows is to install it as part of a Cygwin environment. For more information see the Cygwin home page:
If however installing Cygwin shouldn't be an option for one or the other reason then the sample Makefile may be invoked from the Windows Command Prompt (cmd.exe) by downloading the following programs: