3.2.3 Multi-Step C Compilation

A multi-step compilation method can be employed to build projects consisting of one or more C source files. Make utilities can use this feature, taking note of which source files have changed since the last build to speed up compilation. Incremental builds are also be performed by integrated development environments.

Make utilities typically call the compiler multiple times: once for each source file to generate an intermediate file and once to perform the second stage compilation, which links the intermediate files to form the final output. If only one source file has changed since the last build, the intermediate file corresponding to the unchanged source file need not be regenerated.

For example, the files ex1.c and add.c are to be compiled using a make utility. The command lines that the make utility could use to compile these files might be something like:

xc8-cc -mcpu=atmega3290p -c ex1.c
xc8-cc -mcpu=atmega3290p -c add.c
xc8-cc -mcpu=atmega3290p  -o ex1.elf ex1.o add.o

The -c option, used with the first two commands, will compile the specified file into the intermediate file format, but not perform the link step. The resultant intermediate files are linked in the final step to create the final output ex1.elf. All the files that constitute the project must be present when performing the second stage of compilation.

The above example uses the command-line driver, xc8-cc, to perform the final link step. You can explicitly call the linker application, avr-ld, but this is not recommended as the commands are complex and when driving the linker application directly, you must specify linker options, not driver options, as shown above.

You may also wish to generate intermediate files to construct your own library archive files.