LECTURE 19 Multiple File Compilation

advertisement
LECTURE 19
Multiple File Compilation
MULTIPLE FILE PROJECTS
Most of the time, full programs are not contained in a single file. Many small
programs are easy to write in a single file, but larger programs involve separate files
containing different modules. Usually, files are separated by related content.
A class module normally consists of:
• A header file - contains the declaration of the class (without implementation details).
• An implementation file - contains implementations of the class members.
MULTIPLE FILE PROJECTS
Header files are usually in the format filename.h, and implementation files are
usually in the format filename.cpp. It is a good idea to use the same base filename
for corresponding header and implementation files. Example:
• circle.h
// header file for a class called Circle
• circle.cpp // implementation file for Circle class
Filenames do not have to be the same as the class name, but well-chosen filenames
can help identify the contents or purpose of a file.
When classes are used in a program, the main program would usually be written in a
separate file.
COMPILATION
The "compilation" of a program actually consitsts of two major stages.
• Compile stage
• Syntax checked for correctness.
• Variables and function calls checked to insure that correct declarations were made and that
they match. (Note: the compiler doesn't need to match function definitions to their calls at this
point).
• Translation into object code. Object code is just a translation of your code file -- it is not an
executable program, at this point. (Note: the word "object" in object code does not refer to
the definition of "object" that we use to define object-oriented programming. These are
different terms.)
COMPILATION
• Linking stage
• Links the object code into an executable program.
• May involve one or more object code files.
• The linking stage is the time when function calls are matched up with their definitions, and
the compiler checks to make sure it has one, and only one, definition for every function that is
called.
• The end result of linking is usually an executable program.
PUTTING TOGETHER A MULTIPLE-FILE PROJECT
For a simple example like our Fraction example, it may be tempting to simply use the
following statement inside the main.cpp file:
#include "frac.cpp"
and then just compile the main.cpp file with a single command. This will work in this
example, because it's a linear sequence of #includes -- this essentially causes the
whole thing to be put together into one file as far as the compiler is concerned. This is
not a good idea in the general case.
PUTTING TOGETHER A MULTIPLE-FILE PROJECT
Sometimes the line-up of files is not so linear. The separate ideas of compiling and
linking allow these steps to be done separately and there are some good reasons
and benefits:
• Changes to a file require only that file to be re-compiled (rather than everything),
along with the re-linking.
• Often, libraries are distributed in pre-compiled format, so trying to #include the
.cpp file would not even be feasible. (A pre-compiled library would still give you the
actual .h file for the #include statements, to satisfy declare-before-use in your own
code).
Rule of thumb: Only #include the header files, not the .cpp files!
VISUAL C++
• To build a simple project with multiple files in Visual C++, first follow all of the usual
directions for creating an empty project.
• For creating more code files to go into a project, use the "Add New Item" under the
"Project" menu to add new C++ code files.
• To add an existing code file to a project, choose "Add Existing Item" under the
"Project" menu.
• Header files should end in .h, and they are included into regular code files with the
#include directive.
• Implementation files should end in .cpp.
• An executable can consist of many files, but can have only one main() function!
G++
Example CS account (g++) commands for compilation and linking:
g++ -c frac.cpp
// translates frac.cpp into frac.o
g++ -c main.cpp
// translates main.cpp into main.o
g++ frac.o main.o -o sample
// links into an executable
// called "sample"
EXTRA INFORMATION
• Compiling with g++
• Makefiles (for use with the unix "make" utility - e.g. with g++)
THE DATE CLASS
Let’s look at a sample class which encapsulates a date and its related functions.
Download