compilation and makefilescse251/lecture12.pdf · controlling compilation/linking better • we need...
TRANSCRIPT
![Page 1: Compilation and Makefilescse251/lecture12.pdf · Controlling compilation/linking better • We need a better way to control compilation – too much detail to type each time • We](https://reader034.vdocuments.site/reader034/viewer/2022052023/603941cea04f6d41fd61bafb/html5/thumbnails/1.jpg)
Compilation and Makefiles
CSE 251 Dr. Charles B. OwenProgramming in C1
![Page 2: Compilation and Makefilescse251/lecture12.pdf · Controlling compilation/linking better • We need a better way to control compilation – too much detail to type each time • We](https://reader034.vdocuments.site/reader034/viewer/2022052023/603941cea04f6d41fd61bafb/html5/thumbnails/2.jpg)
Lecture Outline• What is gcc?
– What are the different switches available?
• What is a Makefile?
• Exercise:– Take an existing file, split it into multiple separateTake an existing file, split it into multiple separate programs, and write a Makefile to simplify compilation of the files
CSE 251 Dr. Charles B. OwenProgramming in C2
![Page 3: Compilation and Makefilescse251/lecture12.pdf · Controlling compilation/linking better • We need a better way to control compilation – too much detail to type each time • We](https://reader034.vdocuments.site/reader034/viewer/2022052023/603941cea04f6d41fd61bafb/html5/thumbnails/3.jpg)
gcc is not a single program
gcc is a conglomeration of programs that work together to
make an executable filemake an executable file
We need to know what it does and how we can better control it.and how we can better control it.
In particular, we would like to be able to make multiple, separate p , p
programs which can be combined into one executable
CSE 251 Dr. Charles B. OwenProgramming in C3
![Page 4: Compilation and Makefilescse251/lecture12.pdf · Controlling compilation/linking better • We need a better way to control compilation – too much detail to type each time • We](https://reader034.vdocuments.site/reader034/viewer/2022052023/603941cea04f6d41fd61bafb/html5/thumbnails/4.jpg)
What does gcc do?#i l d tdi hd #include <stdio.h>#include <math.h>
#define NumIter 5
code.c
int main() {int i;
C sourcefile
int i;for (i=1; i<=NumIter; i++)
printf(“PI^%d is %f\n”, i, pow(M_PI, i));}
CSE 251 Dr. Charles B. OwenProgramming in C4
![Page 5: Compilation and Makefilescse251/lecture12.pdf · Controlling compilation/linking better • We need a better way to control compilation – too much detail to type each time • We](https://reader034.vdocuments.site/reader034/viewer/2022052023/603941cea04f6d41fd61bafb/html5/thumbnails/5.jpg)
What does gcc do? ExpandedC code
C ilpreprocessor(# commands)
Compiler
C sourceMachine Code( o file)C source
file(.o file)
Linker
Executable
LibraryFilesFiles
CSE 251 Dr. Charles B. OwenProgramming in C5
![Page 6: Compilation and Makefilescse251/lecture12.pdf · Controlling compilation/linking better • We need a better way to control compilation – too much detail to type each time • We](https://reader034.vdocuments.site/reader034/viewer/2022052023/603941cea04f6d41fd61bafb/html5/thumbnails/6.jpg)
Some gcc optionsP i ( d d i)• Preprocessing (gcc –E code.c > code.i)– Removes preprocessor directives (commands that start with #)– Produces code.i Don’t use directlyProduces code.i Don t use directly
• Compiling (gcc –o code.o –c code.i)– Converts source code to machine language with unresolved directives– Produces the code.o binary
• Linking (gcc –lm –o code code.o)– Creates machine language exectutable– Produces the code binary by linking with the math library (‐lm)
CSE 251 Dr. Charles B. OwenProgramming in C6
![Page 7: Compilation and Makefilescse251/lecture12.pdf · Controlling compilation/linking better • We need a better way to control compilation – too much detail to type each time • We](https://reader034.vdocuments.site/reader034/viewer/2022052023/603941cea04f6d41fd61bafb/html5/thumbnails/7.jpg)
C Preprocessor, cppExpanded
Processes commands that are preceded with # symbols and
preprocessor(# commands)
ExpandedC code
p yexpands the code
#include(# commands)
#define#ifdef and #ifndef
C sourcefile
CSE 251 Dr. Charles B. OwenProgramming in C7
![Page 8: Compilation and Makefilescse251/lecture12.pdf · Controlling compilation/linking better • We need a better way to control compilation – too much detail to type each time • We](https://reader034.vdocuments.site/reader034/viewer/2022052023/603941cea04f6d41fd61bafb/html5/thumbnails/8.jpg)
#include
Include header files that contain declarations necessary for compiling code
– the declarations provide the proper types, but not the actual definitions (the actual code)
CSE 251 Dr. Charles B. OwenProgramming in C8
![Page 9: Compilation and Makefilescse251/lecture12.pdf · Controlling compilation/linking better • We need a better way to control compilation – too much detail to type each time • We](https://reader034.vdocuments.site/reader034/viewer/2022052023/603941cea04f6d41fd61bafb/html5/thumbnails/9.jpg)
data c
# ifndef _STDIO_H
# if !defined need FILE &&
stdio.h
#include <stdio.h>
#include “functions.h”
data.c __ _!defined __need___FILE
# define _STDIO_H 1
# include <features.h>
int main() {
double x = 1;
__BEGIN_DECLS
…
printf(“Sinc(x) = %f\n”, Sinc(x));
} double Sinc(double x);
functions.h
gcc –E data.c > data.idata i is like an “expanded” C code in which the #include commanddata.i is like an expanded C code in which the #include command is “substituted” with text from the files
CSE 251 Dr. Charles B. OwenProgramming in C9
![Page 10: Compilation and Makefilescse251/lecture12.pdf · Controlling compilation/linking better • We need a better way to control compilation – too much detail to type each time • We](https://reader034.vdocuments.site/reader034/viewer/2022052023/603941cea04f6d41fd61bafb/html5/thumbnails/10.jpg)
Example#include “display.h”display h
main.c
void DisplayMe(int n); int main(){
DisplayMe(12);
display.h
DisplayMe(12);}
CSE 251 Dr. Charles B. OwenProgramming in C10 A
![Page 11: Compilation and Makefilescse251/lecture12.pdf · Controlling compilation/linking better • We need a better way to control compilation – too much detail to type each time • We](https://reader034.vdocuments.site/reader034/viewer/2022052023/603941cea04f6d41fd61bafb/html5/thumbnails/11.jpg)
Header Files
We’ve been using .h files to define things from the C libraries:stdio.h, stdlib.h, stdbool.h, etc.
These are called Header Files.
We’re going to create our own .h files to share information between .c files.
CSE 251 Dr. Charles B. OwenProgramming in C11
![Page 12: Compilation and Makefilescse251/lecture12.pdf · Controlling compilation/linking better • We need a better way to control compilation – too much detail to type each time • We](https://reader034.vdocuments.site/reader034/viewer/2022052023/603941cea04f6d41fd61bafb/html5/thumbnails/12.jpg)
#defined f bl#defines a preprocessor variable
– every place the variable occurs, the definition will be substituted as codesubstituted as code
Syntax: #define var_name var_definitiony _ _– Examples:
#define DEBUG 1#d fi PI 3 1415926535#define PI 3.1415926535
CSE 251 Dr. Charles B. OwenProgramming in C12
![Page 13: Compilation and Makefilescse251/lecture12.pdf · Controlling compilation/linking better • We need a better way to control compilation – too much detail to type each time • We](https://reader034.vdocuments.site/reader034/viewer/2022052023/603941cea04f6d41fd61bafb/html5/thumbnails/13.jpg)
#include <stdio.h>#define PI 3 14157265
preproc.c
gcc –E preproc c > preproc i#define PI 3.14157265#define square(x) (x*x)
int main() {
gcc E preproc.c > preproc.i
printf("Value of PI is %f\n", PI);printf("Square of 3.5 is %f\n", square(3.5));
}
# 1 “preproc.c"# 1 "<built‐in>"# 1 "<command line>“
preproc.i
# 1 <command‐line>…typedef unsigned int size_t;…int main() {printf("Value of PI is %f\n", 3.14157265);printf("Square of 3.5 is %f\n", (3.5*3.5));
}
CSE 251 Dr. Charles B. OwenProgramming in C13
}
![Page 14: Compilation and Makefilescse251/lecture12.pdf · Controlling compilation/linking better • We need a better way to control compilation – too much detail to type each time • We](https://reader034.vdocuments.site/reader034/viewer/2022052023/603941cea04f6d41fd61bafb/html5/thumbnails/14.jpg)
#ifdef, #ifndef, #ifSurround code that might be included. Include for compilation when desired
#ifdef DEBUG….#endif#ifndef DEBUG#ifndef DEBUG…#endif#endif
CSE 251 Dr. Charles B. OwenProgramming in C14
![Page 15: Compilation and Makefilescse251/lecture12.pdf · Controlling compilation/linking better • We need a better way to control compilation – too much detail to type each time • We](https://reader034.vdocuments.site/reader034/viewer/2022052023/603941cea04f6d41fd61bafb/html5/thumbnails/15.jpg)
Common useif(num == 1){/* This is the only time we actually move a disk */DisplayTower(tower);DisplayTower(tower);
#if 0printf("Press return");
( ( ) )
This is a handy way to turn off a block of code without removing it It often worksfgets(cmd, sizeof(cmd), stdin);
#endif
MoveDisk(tower, fm, to);
removing it. It often works better than trying to comment out the block, MoveDisk(tower, fm, to);
return;}
which may have comments already in it.
CSE 251 Dr. Charles B. OwenProgramming in C15
![Page 16: Compilation and Makefilescse251/lecture12.pdf · Controlling compilation/linking better • We need a better way to control compilation – too much detail to type each time • We](https://reader034.vdocuments.site/reader034/viewer/2022052023/603941cea04f6d41fd61bafb/html5/thumbnails/16.jpg)
Header Files #include <stdio.h>#include <stdlib.h>hanoi h:
hanoi.c:
#define NumDisks 6#define NumPins 3
#include <stdbool.h>
#include “hanoi.h”
hanoi.h:
bool CheckDone(int tower[NumPins][NumDisks]);
#i l d di h
display.c:I have two .c files in the same program. B h d k #include <stdio.h>
#include <stdlib.h>#include <stdbool.h>
Both need to know NumDisks and NumPins. So, I put that
#include “hanoi.h”
void DisplayTower(int tower[NumPins][NumDisks]){
information in a header file: hanoi.h
{…}
CSE 251 Dr. Charles B. OwenProgramming in C16
![Page 17: Compilation and Makefilescse251/lecture12.pdf · Controlling compilation/linking better • We need a better way to control compilation – too much detail to type each time • We](https://reader034.vdocuments.site/reader034/viewer/2022052023/603941cea04f6d41fd61bafb/html5/thumbnails/17.jpg)
Example#include “hanoi.h”hanoi h:
hanoi.c:
#define NumDisks 6#define NumPins 3
bool CheckDone(int tower[NumPins][NumDisks]);
#if 0
hanoi.h:
#if 0bool DebugStuff(int x, int b[NumPins]);#endif
CSE 251 Dr. Charles B. OwenProgramming in C17 B
![Page 18: Compilation and Makefilescse251/lecture12.pdf · Controlling compilation/linking better • We need a better way to control compilation – too much detail to type each time • We](https://reader034.vdocuments.site/reader034/viewer/2022052023/603941cea04f6d41fd61bafb/html5/thumbnails/18.jpg)
What would happen? #include <stdio.h>#include <stdlib.h>hanoi h:
hanoi.c:
#define NumDisks 6#define NumPins 3
#include <stdbool.h>
#include “solve.h”#include “hanoi h”
hanoi.h:
#include hanoi.h
bool CheckDone(int tower[NumPins][NumDisks]);#include “hanoi.h”
solve.h:
void Autosolve(inttower[NumPins][NumDisks]);
CSE 251 Dr. Charles B. OwenProgramming in C18 C
![Page 19: Compilation and Makefilescse251/lecture12.pdf · Controlling compilation/linking better • We need a better way to control compilation – too much detail to type each time • We](https://reader034.vdocuments.site/reader034/viewer/2022052023/603941cea04f6d41fd61bafb/html5/thumbnails/19.jpg)
Include Guards #include <stdio.h>#include <stdlib.h>hanoi h:
hanoi.c:
#ifndef HANOI_H#define HANOI_H
#include <stdbool.h>
#include “solve.h”#include “hanoi h”
hanoi.h:
#define NumDisks 6#define NumPins 3
# dif
#include hanoi.h
bool CheckDone(int tower[NumPins][NumDisks]);
#endif
#ifndef SOLVE H
solve.h: Include Guards: Conditional compilation code that protects a #ifndef SOLVE_H
#define SOLVE_H
#include “hanoi.h”
section of code in a header from being compiled more than once.
void Autosolve(inttower[NumPins][NumDisks]);
CSE 251 Dr. Charles B. OwenProgramming in C19
#endif
![Page 20: Compilation and Makefilescse251/lecture12.pdf · Controlling compilation/linking better • We need a better way to control compilation – too much detail to type each time • We](https://reader034.vdocuments.site/reader034/viewer/2022052023/603941cea04f6d41fd61bafb/html5/thumbnails/20.jpg)
Compiling ExpandedC code
Object Code (.o file)
gcc –c code.c
preprocessor(# commands)
Compiler
C
Compiler translates the C source code into object code – what the machine actually
C sourcefile understands
Machine‐specific
Each line represents either a piece of data orEach line represents either a piece of data or a machine‐level instruction
To create the assembly code:gcc -c preproc.c
CSE 251 Dr. Charles B. OwenProgramming in C20
![Page 21: Compilation and Makefilescse251/lecture12.pdf · Controlling compilation/linking better • We need a better way to control compilation – too much detail to type each time • We](https://reader034.vdocuments.site/reader034/viewer/2022052023/603941cea04f6d41fd61bafb/html5/thumbnails/21.jpg)
Linking• Object file may not be directly executable
– Missing some partsStill has some names to be resolved– Still has some names to be resolved
• The linker (ld) takes multiple object files ( o) and putsThe linker (ld) takes multiple object files (.o) and puts them together into one executable file– Resolves references to calls from one file to another
• Linking is important as it allows multiple, separate fil t b b ht t thfiles to be brought together
CSE 251 Dr. Charles B. OwenProgramming in C21
![Page 22: Compilation and Makefilescse251/lecture12.pdf · Controlling compilation/linking better • We need a better way to control compilation – too much detail to type each time • We](https://reader034.vdocuments.site/reader034/viewer/2022052023/603941cea04f6d41fd61bafb/html5/thumbnails/22.jpg)
Linkingpreprocessor
ExpandedC code
Compilergcc ‐E
p
gcc ‐c
C source
Machine Code(.o file)
file
Linker
ExecutableExecutable
LibraryFiles
gcc –lm code.o –o code
CSE 251 Dr. Charles B. OwenProgramming in C22
![Page 23: Compilation and Makefilescse251/lecture12.pdf · Controlling compilation/linking better • We need a better way to control compilation – too much detail to type each time • We](https://reader034.vdocuments.site/reader034/viewer/2022052023/603941cea04f6d41fd61bafb/html5/thumbnails/23.jpg)
Separate compilation
• For large, complex programs, it is a good idea to break your files into separate .c and .h files
• Can debug each separately, then reuse
• Can distribute pieces to other so they can incorporate into their code without changing their code (just link it in)
CSE 251 Dr. Charles B. OwenProgramming in C23
![Page 24: Compilation and Makefilescse251/lecture12.pdf · Controlling compilation/linking better • We need a better way to control compilation – too much detail to type each time • We](https://reader034.vdocuments.site/reader034/viewer/2022052023/603941cea04f6d41fd61bafb/html5/thumbnails/24.jpg)
Example (Separate Compilation)shapes.h shapes.cmainprog.c
math.h
mainprog
gcc -c shapes.cg p
gcc –c mainprog.c
gcc –lm mainprog.o shapes.o –o mainprog
CSE 251 Dr. Charles B. OwenProgramming in C24
![Page 25: Compilation and Makefilescse251/lecture12.pdf · Controlling compilation/linking better • We need a better way to control compilation – too much detail to type each time • We](https://reader034.vdocuments.site/reader034/viewer/2022052023/603941cea04f6d41fd61bafb/html5/thumbnails/25.jpg)
Another way (Compile all at once)shapes.h shapes.cmainprog.c
math.h
mainprog
l h i igcc –lm shapes.c mainprog.c –o mainprog
CSE 251 Dr. Charles B. OwenProgramming in C25
![Page 26: Compilation and Makefilescse251/lecture12.pdf · Controlling compilation/linking better • We need a better way to control compilation – too much detail to type each time • We](https://reader034.vdocuments.site/reader034/viewer/2022052023/603941cea04f6d41fd61bafb/html5/thumbnails/26.jpg)
Controlling compilation/linking better
• We need a better way to control compilation– too much detail to type each time
• We can save time by only updating (compiling) the parts that need updating– if a .o file is OK (unchanged source), leave it. If a .c file is changed, the .o file needs to be regenerated then everything relinkedeverything relinked
CSE 251 Dr. Charles B. OwenProgramming in C26
![Page 27: Compilation and Makefilescse251/lecture12.pdf · Controlling compilation/linking better • We need a better way to control compilation – too much detail to type each time • We](https://reader034.vdocuments.site/reader034/viewer/2022052023/603941cea04f6d41fd61bafb/html5/thumbnails/27.jpg)
Makefiles
• Suppose you have a program, which is made up of these 5 source files:main.c (include data.h, io.h)data.c (include data.h)d hdata.hio.c (include io.h)io hio.h
CSE 251 Dr. Charles B. OwenProgramming in C27
![Page 28: Compilation and Makefilescse251/lecture12.pdf · Controlling compilation/linking better • We need a better way to control compilation – too much detail to type each time • We](https://reader034.vdocuments.site/reader034/viewer/2022052023/603941cea04f6d41fd61bafb/html5/thumbnails/28.jpg)
How to create the executable?
data .c data.h main.c io.cio.h
gcc -c data.c → data.ogcc c io c → io ogcc -c io.c → io.ogcc -c main.c → main.o
i i d t t blgcc main.o io.o data.o –o executable
CSE 251 Dr. Charles B. OwenProgramming in C28
![Page 29: Compilation and Makefilescse251/lecture12.pdf · Controlling compilation/linking better • We need a better way to control compilation – too much detail to type each time • We](https://reader034.vdocuments.site/reader034/viewer/2022052023/603941cea04f6d41fd61bafb/html5/thumbnails/29.jpg)
How to create the executable?
data .c data.h main.c io.cio.h
gcc -c data.cgcc c io c
What if you modify data.h?
D d tgcc -c io.cgcc -c main.c
i i d t t bl
Do you need to re‐run gcc ‐c on io.c and main.c?
gcc main.o io.o data.o –o executable
CSE 251 Dr. Charles B. OwenProgramming in C29
![Page 30: Compilation and Makefilescse251/lecture12.pdf · Controlling compilation/linking better • We need a better way to control compilation – too much detail to type each time • We](https://reader034.vdocuments.site/reader034/viewer/2022052023/603941cea04f6d41fd61bafb/html5/thumbnails/30.jpg)
Dependencies executable
data.o main.o io.o
data.c data .h main.c io.cio.h
CSE 251 Dr. Charles B. OwenProgramming in C30
![Page 31: Compilation and Makefilescse251/lecture12.pdf · Controlling compilation/linking better • We need a better way to control compilation – too much detail to type each time • We](https://reader034.vdocuments.site/reader034/viewer/2022052023/603941cea04f6d41fd61bafb/html5/thumbnails/31.jpg)
What is a Makefile?
• A Makefile is used with the make utility to determine which portions of a program to compile.
• It is basically a script that guides the make utility to choose the appropriate program files that are to be compiled and linked together
CSE 251 Dr. Charles B. OwenProgramming in C31
![Page 32: Compilation and Makefilescse251/lecture12.pdf · Controlling compilation/linking better • We need a better way to control compilation – too much detail to type each time • We](https://reader034.vdocuments.site/reader034/viewer/2022052023/603941cea04f6d41fd61bafb/html5/thumbnails/32.jpg)
If data.h is modified executable
d t i idata.o main.o io.o
data .c data .h main.c io.cio.h
No need to re‐create data.o and main.o
CSE 251 Dr. Charles B. OwenProgramming in C32
![Page 33: Compilation and Makefilescse251/lecture12.pdf · Controlling compilation/linking better • We need a better way to control compilation – too much detail to type each time • We](https://reader034.vdocuments.site/reader034/viewer/2022052023/603941cea04f6d41fd61bafb/html5/thumbnails/33.jpg)
If io.c is modified executable
d t i idata.o main.o io.o
data .c data .h main.c io.cio.h
No need to re‐create data.o and main.o
CSE 251 Dr. Charles B. OwenProgramming in C33
![Page 34: Compilation and Makefilescse251/lecture12.pdf · Controlling compilation/linking better • We need a better way to control compilation – too much detail to type each time • We](https://reader034.vdocuments.site/reader034/viewer/2022052023/603941cea04f6d41fd61bafb/html5/thumbnails/34.jpg)
#ifndef HANOI_H#define HANOI_H
#include <stdio.h>#include <stdlib.h>
hanoi.h: hanoi.c:
#define NumDisks 6#define NumPins 3
#include <stdbool.h>
#include “solve.h”#include “hanoi h”
#endif#include hanoi.h
bool CheckDone(int tower[NumPins][NumDisks]);solve.h:
#ifndef SOLVE_H#define SOLVE_H
#include “hanoi h”
#include <stdio.h>#include <stdlib.h>
display.c:
#include hanoi.h
void Autosolve(inttower[NumPins][NumDisks]);
#include <stdbool.h>
#include “hanoi.h”
#endifbool DisplayTower(int tower[NumPins][NumDisks]);
CSE 251 Dr. Charles B. OwenProgramming in C34 D
![Page 35: Compilation and Makefilescse251/lecture12.pdf · Controlling compilation/linking better • We need a better way to control compilation – too much detail to type each time • We](https://reader034.vdocuments.site/reader034/viewer/2022052023/603941cea04f6d41fd61bafb/html5/thumbnails/35.jpg)
What is in a Makefile?
name incolumn1 spaces
fil d d 1 d d 2
not commas
file: dependency1 dependency2command
TAB character
CSE 251 Dr. Charles B. OwenProgramming in C35
![Page 36: Compilation and Makefilescse251/lecture12.pdf · Controlling compilation/linking better • We need a better way to control compilation – too much detail to type each time • We](https://reader034.vdocuments.site/reader034/viewer/2022052023/603941cea04f6d41fd61bafb/html5/thumbnails/36.jpg)
What it means
• The first line indicates what a file depends on. That is, if any of the dependencies change, then that file must be updated– What updating means is defined in the command listed below the dependencybelow the dependency
• Don’t forget the TAB character to begin the second• Don t forget the TAB character to begin the second line
CSE 251 Dr. Charles B. OwenProgramming in C36
![Page 37: Compilation and Makefilescse251/lecture12.pdf · Controlling compilation/linking better • We need a better way to control compilation – too much detail to type each time • We](https://reader034.vdocuments.site/reader034/viewer/2022052023/603941cea04f6d41fd61bafb/html5/thumbnails/37.jpg)
Dependency graph Executable (prog)
data.o main.o io.o
data .c data .h main.c io.cio.h
CSE 251 Dr. Charles B. OwenProgramming in C37
![Page 38: Compilation and Makefilescse251/lecture12.pdf · Controlling compilation/linking better • We need a better way to control compilation – too much detail to type each time • We](https://reader034.vdocuments.site/reader034/viewer/2022052023/603941cea04f6d41fd61bafb/html5/thumbnails/38.jpg)
Creating a Makefile Makefile:
Executable (prog) prog:
data.o:
data.o main.o io.o
main.o:
io.o:
data .c data .h main.c io.cio.h
List the object (*.o) and executable files that make up the program
CSE 251 Dr. Charles B. OwenProgramming in C38
![Page 39: Compilation and Makefilescse251/lecture12.pdf · Controlling compilation/linking better • We need a better way to control compilation – too much detail to type each time • We](https://reader034.vdocuments.site/reader034/viewer/2022052023/603941cea04f6d41fd61bafb/html5/thumbnails/39.jpg)
Creating a Makefile Makefile:
d t i iExecutable (prog) prog: data.o main.o io.ogcc –o prog data.o main.o io.o
data.o: data.h data.c
data.o main.o io.ogcc –c data.c
main.o: data.h io.h main.cigcc –c main.c
io.o: io.h io.cgcc –c io.c
data .c data .h main.c io.cio.h
First line specifies the dependencies for
g
each object and executable files
CSE 251 Dr. Charles B. OwenProgramming in C39
![Page 40: Compilation and Makefilescse251/lecture12.pdf · Controlling compilation/linking better • We need a better way to control compilation – too much detail to type each time • We](https://reader034.vdocuments.site/reader034/viewer/2022052023/603941cea04f6d41fd61bafb/html5/thumbnails/40.jpg)
Creating a Makefiled t i i
Makefile:
Executable (prog)prog: data.o main.o io.o
gcc –o prog data.o main.o io.o
data.o: data.h data.c
data.o main.o io.ogcc –c data.c
main.o: data.h io.h main.cigcc –c main.c
io.o: io.h io.cgcc –c io.c
data .c data .h main.c io.cio.hg
Second line contains the command to execute if any of the dependence files y pare modified
CSE 251 Dr. Charles B. OwenProgramming in C40
![Page 41: Compilation and Makefilescse251/lecture12.pdf · Controlling compilation/linking better • We need a better way to control compilation – too much detail to type each time • We](https://reader034.vdocuments.site/reader034/viewer/2022052023/603941cea04f6d41fd61bafb/html5/thumbnails/41.jpg)
Additional makefile “targets”
clean: rm -rf *.o example22
Command “make clean” calls the clean commandIn this case clears the o files and the executableIn this case, clears the .o files and the executable
CSE 251 Dr. Charles B. OwenProgramming in C41
![Page 42: Compilation and Makefilescse251/lecture12.pdf · Controlling compilation/linking better • We need a better way to control compilation – too much detail to type each time • We](https://reader034.vdocuments.site/reader034/viewer/2022052023/603941cea04f6d41fd61bafb/html5/thumbnails/42.jpg)
Usage
• make– To create the executable
• make linkedList.o– do what has to be done to make that .o file, then stop
• make clean– run the clean command
CSE 251 Dr. Charles B. OwenProgramming in C42 1