160 likes | 279 Views
CS201 – Makefile. Tutorial. A Trivial Makefile. # Trivial Makefile for puzzle1.c # Ray S. Babcock, CS201, MSU-Bozeman # 1/5/05 # puzzle1: puzzle1.c gcc –o puzzle1 puzzle1.c. A Trivial Makefile. # Trivial Makefile for puzzle1.c # Ray S. Babcock, CS201, MSU-Bozeman # 1/5/05 #
E N D
CS201 – Makefile Tutorial
A Trivial Makefile # Trivial Makefile for puzzle1.c # Ray S. Babcock, CS201, MSU-Bozeman # 1/5/05 # puzzle1: puzzle1.c gcc –o puzzle1 puzzle1.c
A Trivial Makefile # Trivial Makefile for puzzle1.c # Ray S. Babcock, CS201, MSU-Bozeman # 1/5/05 # puzzle1: puzzle1.c gcc –o puzzle1 puzzle1.c COMMENTS
A Trivial Makefile # Trivial Makefile for puzzle1.c # Ray S. Babcock, CS201, MSU-Bozeman # 1/5/05 # puzzle1: puzzle1.c gcc –o puzzle1 puzzle1.c Target Target’s Prerequisites Dependency Line
What’s happening here? Source File puzzle1.c Gnu C compiler gcc RunImage Depends on puzzle1
So what’s a “run image” file? • A run image file is an exact copy of the computer’s ram memory containing the binary equivalent of the program. • To “run” the program, you load the run image file and point your computer to the start of the program. This is done by typing the run image file name at the operating system prompt. • $ puzzle1
A Trivial Makefile # Trivial Makefile for puzzle1.c # Ray S. Babcock, CS201, MSU-Bozeman # 1/5/05 # puzzle1: puzzle1.c gcc –o puzzle1 puzzle1.c Time stamp on this file is compared to the time stamp on this file. Dependency Line
A Trivial Makefile # Trivial Makefile for puzzle1.c # Ray S. Babcock, CS201, MSU-Bozeman # 1/5/05 # puzzle1: puzzle1.c gcc –o puzzle1 puzzle1.c Time stamp on this file is compared to the time stamp on this file. Dependency Line If the target’s time stamp is earlier than the prerequisite’s time stamp, the rule below this dependency line is executed.
So what is a time stamp? • The time that the file was last modified. • If the target’s time is earlier than the prerequisite’s time, this means that the prerequisite file has been changed, but the run image has not been updated.
A Trivial Makefile # Trivial Makefile for puzzle1.c # Ray S. Babcock, CS201, MSU-Bozeman # 1/5/05 # puzzle1: puzzle1.c gcc –o puzzle1 puzzle1.c Rule Line Must be a tab!!
A Trivial Makefile # Trivial Makefile for puzzle1.c # Ray S. Babcock, CS201, MSU-Bozeman # 1/5/05 # puzzle1: puzzle1.c gcc –o puzzle1 puzzle1.c Rule Line Any Linux command
Example time stamps • Assume puzzle1 has TS Jan 16 14:00 • Assume puzzle1.c has TS Jan 16 13:55 • Target is LATER than prerequisite, so rule is NOT executed!
Example time stamps • Assume puzzle1 has TS Jan 16 13:00 • Assume puzzle1.c has TS Jan 16 13:55 • Target is EARLIER than prerequisite, so rule is executed!
Example • Build a source file with code for puzzle1.c • Build a Makefile with an appropriate dependency line. • Run make • $ make • gcc -o puzzle1 puzzle1.c • The rule executes since the file puzzle1 does not even exist yet!
What if you tried make again? • $ make make: ‘puzzle1’ is up to date $
Makefile Summary • Build a dependency line for every target. • Add a rule line to rebuild the target. • Start the rule line with a tab. • Add comments to the top of the file. • Save these lines in an ASCII file called Makefile. (For now assume it must be exactly that name, with a capital M).