Next: , Previous: , Up: Compiling a C program   [Contents][Index]


2.5 Recompiling and relinking

To show how source files can be compiled independently we will edit the main program main.c and modify it to print a greeting to everyone instead of world:

#include "hello.h"

int
main (void)
{
  hello ("everyone");  /* changed from "world" */
  return 0;
}

The updated file main.c can now be recompiled with the following command:

$ gcc -Wall -c main.c

This produces a new object file main.o. There is no need to create a new object file for hello_fn.c, since that file and the related files that it depends on, such as header files, have not changed.

The new object file can be relinked with the hello function to create a new executable file:

$ gcc main.o hello_fn.o -o hello

The resulting executable hello now uses the new main function to produce the following output:

$ ./hello
Hello, everyone!

Note that only the file main.c has been recompiled, and then relinked with the existing object file for the hello function. If the file hello_fn.c had been modified instead, we could have recompiled hello_fn.c to create a new object file hello_fn.o and relinked this with the existing file main.o.3

In a large project with many source files, recompiling only those that have been modified can make a significant saving. The process of recompiling only the modified files in a project can be automated with the standard Unix program make.


Footnotes

(3)

If the prototype of a function has changed, it is necessary to modify and recompile all of the other source files which use it.


Next: , Previous: , Up: Compiling a C program   [Contents][Index]