GCC Tutorial: COMP 444/5201 Revision 1.1 Date: January 25, 2004
GCC Tutorial: COMP 444/5201 Revision 1.1 Date: January 25, 2004
Contents
Intro Options Examples
August 7, 2003
What is gcc?
gcc
stands for GNU C/C++ Compiler a popular console-based compiler for *NIX platforms and others; can cross-compile code for various architectures gcc to compile C programs; g++ for C++ can actually work with also ADA, Java, and a couple other languages gcc performs all of these:
preprocessing, compilation, assembly, and linking
Options
There are zillions of them, but there are some the most often used ones:
To compile: -c Specify output filename: -o <filename> Include debugging symbols: -g GDB friendly output: -ggdb Show all (most) warnings: -Wall Be stubborn about standards: -ansi and -pedantic Optimizations: -O, -O*
Serguei A. Mokhov, [email protected] 4
August 7, 2003
Options: -c
gcc performs compilation and assembly of the source file without linking. The output are usually object code files, .o; they can later be linked and form the desired executables. Generates one object file per source file keeping the same prefix (before .) of the filename.
August 7, 2003 Serguei A. Mokhov, [email protected] 5
Options: -o <filename>
Places resulting file into the filename specified instead of the default one. Can be used with any generated files (object, executables, assembly, etc.) If you have the file called source.c; the defaults are:
source.o if -c was specified a.out if executable
Options: -g
Includes debugging info in the generated object code. This info can later be used in gdb. gcc allows to use -g with the optimization turned on (-O) in case there is a need to debug or trace the optimized code.
August 7, 2003
Options: -ggdb
In addition to -g produces the most GDBfriendly output if enabled.
August 7, 2003
Options: -Wall
Shows most of the warnings related to possibly incorrect code. -Wall is a combination of a large common set of the -W options together. These typically include:
unused variables possibly uninitialized variables when in use for the first time defaulting return types missing braces and parentheses in certain context that make it ambiguous etc.
Always a recommended option to save your bacon from some hidden bugs. Try always using it and avoid having those warnings.
August 7, 2003 Serguei A. Mokhov, [email protected] 9
August 7, 2003
11
Options: -I
Tells gcc where to look for include files (.h). Can be any number of these. Usually needed when including headers from various-depth directories in non-standard places without necessity specifying these directories with the .c files themselves, e.g.: #include myheader.h vs. #include ../foo/bar/myheader.h
August 7, 2003 Serguei A. Mokhov, [email protected] 12
Example
For example, if you have the following source files in some project of yours:
ccountln.h ccountln.c fileops.h fileops.c process.h process.c parser.h parser.c
You could compile every C file and then link the objet files generated, or use a single command for the entire thing.
This becomes unfriendly when the number of files increases; hence, use Makefiles!
NOTE: you dont NEED to compile .h files explicitly. August 7, 2003 Serguei A. Mokhov,
[email protected]
14
Example (2)
One by one:
gcc -g -Wall -ansi -pedantic -c ccountln.c gcc -g -Wall -ansi -pedantic -c parser.c gcc -g -Wall -ansi -pedantic -c fileops.c gcc -g -Wall -ansi -pedantic -c process.c
This will give you four object files that you need to link and produce an executable:
gcc ccountln.o parser.o fileops.o process.o -o ccountln
August 7, 2003
15
Example (3)
You can do this as well:
gcc -g -Wall -ansi -pedantic ccountln.c parser.c fileops.c process.c -o ccountln
August 7, 2003
16
Example (4)
# Simple Makefile with use of gcc could look like this CC=gcc CFLAGS=-g -Wall -ansi -pedantic OBJ:=ccountln.o parser.o process.o fileops.o EXE=ccountln all: $(EXE) $(EXE): $(OBJ) $(CC) $(OBJ) -o $(EXE) ccountln.o: ccountln.h ccountln.c $(CC) $(CFLAGS) -c ccountln.c ...
August 7, 2003 Serguei A. Mokhov, [email protected] 17