7.2.2 Single-Step Compilation

A single command-line can be used to compile one file or multiple files.

Compiling a Single File

This section demonstrates how to compile and link a single file. For the purpose of this discussion, it is assumed the compiler is installed in the standard directory location and that your PATH or other environment variables (see the Environment Variables section) are set up in such a way that the full compiler path need not be specified when you run the compiler.

The following is a simple C program that adds two numbers.

Create the following program with any text editor and save it as ex1.c.

#include <xc.h>
int main(void);
unsigned int Add(unsigned int a, unsigned int b);
unsigned int x, y, z;
int
main(void)
{
  x = 2;
  y = 5;
  z = Add(x,y);
  return 0;
}
unsigned int
Add(unsigned int a, unsigned int b)
{
  return(a+b);
}

The first line of the program includes the header file xc.h, which will include the appropriate header files that provides definitions for all special function registers on the target device. For more information on header files, see the Device Header Files section.

Compile the program by typing the following at the prompt in your favorite terminal.

xc16-gcc -mcpu=30f2010 -T p30f2010.gld -o ex1.elf ex1.c

The command-line option -o ex1.elf names the output executable file (if the -o option is not specified, then the output file is named a.out). The executable file may be loaded into the MPLAB X IDE.

If a hex file is required, for example, to load into a device programmer, then use the following command:

xc16-bin2hex ex1.elf

This creates an Intel hex file named ex1.hex.

Compiling Multiple Files

Move the Add() function into a file called add.c to demonstrate the use of multiple files in an application. That is:

File 1
/* ex1.c */
#include <xc.h>
int main(void);
unsigned int Add(unsigned int a, unsigned int b);
unsigned int x, y, z;
int main(void)
{
  x = 2;
  y = 5;
  z = Add(x,y);
  return 0;
}

File 2
/* add.c */
#include <xc.h>
unsigned int
Add(unsigned int a, unsigned int b)
{
  return(a+b);
}

Compile both files in the one command by typing the following in your terminal program.

xc16-gcc -mcpu=30f2010 -T p30f2010.gld -o ex1.elf ex1.c add.c

This command compiles the modules ex1.c and add.c. The compiled modules are linked with the compiler libraries and the executable file ex1.elf is created.