makefiles tutorial

21
Introduction Compiling Makefiles Example Extras Making makefiles Tutorial for CS-2810 Subhashini V IIT Madras Subhashini V Tutorial on make

Upload: vsubhashini

Post on 18-Dec-2014

2.007 views

Category:

Technology


3 download

DESCRIPTION

A quick introduction to makefiles.

TRANSCRIPT

Page 1: makefiles tutorial

Introduction Compiling Makefiles Example Extras

Making makefilesTutorial for CS-2810

Subhashini V

IIT Madras

Subhashini V Tutorial on make

Page 2: makefiles tutorial

Introduction Compiling Makefiles Example Extras

Outline

IntroductionMotivation

CompilingObject file

MakefilesMacrosNamingPhony-Targets

Example

ExtrasDefault-rulesRemarks

Subhashini V Tutorial on make

Page 3: makefiles tutorial

Introduction Compiling Makefiles Example Extras Motivation

The why, what and how of makefiles for you and me.

Figure: xkcd

(comic is for sudo, but who cares, it has ‘make’)

Subhashini V Tutorial on make

Page 4: makefiles tutorial

Introduction Compiling Makefiles Example Extras Motivation

Why makefiles?

I Lots of source files: foo1.h, foo2.h, foobar1.cpp, foobar2.cpp

I How to manage them all?

I Compiling is complicated!!!

I Solution: make

Subhashini V Tutorial on make

Page 5: makefiles tutorial

Introduction Compiling Makefiles Example Extras Motivation

Why makefiles?

I Lots of source files: foo1.h, foo2.h, foobar1.cpp, foobar2.cpp

I How to manage them all?

I Compiling is complicated!!!

I Solution: make

Subhashini V Tutorial on make

Page 6: makefiles tutorial

Introduction Compiling Makefiles Example Extras Motivation

What are makefiles?

I make - automagically build and manage your programs.

I compile quickly with a single command

I recompile is even quicker

Subhashini V Tutorial on make

Page 7: makefiles tutorial

Introduction Compiling Makefiles Example Extras Motivation

How does it work?

I Give targets (usually a file to be created)

I Specify dependencies for each target.

I Give command to create target from dependencies.

I ‘make’ recursively builds the targets from the set ofdependencies.

I recompilation - time-stamp of modification

Subhashini V Tutorial on make

Page 8: makefiles tutorial

Introduction Compiling Makefiles Example Extras Object file

.h and .cpp

.h files contain

I declarations.

I functions that the class promises.

.cpp files contain

I definitions

I implementations of the promised methods.

I other functions that are not a part of any class.

Subhashini V Tutorial on make

Page 9: makefiles tutorial

Introduction Compiling Makefiles Example Extras Object file

BigInt assignment example

The BigInt data type in RSA

I BigInt.h - with proposed methods : +, -, *, /, !

I BigInt.cpp - with implementation of methods

I rsa.cpp - ONLY needs #include “BigInt.h”.Don’t need BigInt.cpp.

Subhashini V Tutorial on make

Page 10: makefiles tutorial

Introduction Compiling Makefiles Example Extras Object file

Creating Object file

object file or (.o file)

I For creating rsa.o, no need to include BigInt.cpp!

I Eventually need BigInt.cpp for running.

I Link later.

I You also don’t need main()

Command:

g++ -Wall -c rsa.cpp

* -Wall : all warnings turned on

* -c : Compiles but doesn’t link

Subhashini V Tutorial on make

Page 11: makefiles tutorial

Introduction Compiling Makefiles Example Extras Macros Naming Phony-Targets

Makefiles!A makefile describes the dependencies between files.

Figure: Content of a Makefile

Subhashini V Tutorial on make

Page 12: makefiles tutorial

Introduction Compiling Makefiles Example Extras Macros Naming Phony-Targets

Targets, Dependencies, Commands

I Target is usually a file. Remember “:”

I Dependencies : .cpp, corresponding .h and other .h files

I Determining dependencies.

I the all important [tab]

I Commands : can be multiple

Subhashini V Tutorial on make

Page 13: makefiles tutorial

Introduction Compiling Makefiles Example Extras Macros Naming Phony-Targets

Use macros!

Like #define

OBJS = rsa.o main.o

CPP = g++

DEBUG = -g

CPPFLAGS = -Wall -c $(DEBUG)

LDFLAGS = -lm

Usage: $(variable)rsa : $(OBJS)

$(CPP) $(LDFLAGS) $(OBJS) -o rsa

I Automatic variables : $@ , $<, $^ ...

Subhashini V Tutorial on make

Page 14: makefiles tutorial

Introduction Compiling Makefiles Example Extras Macros Naming Phony-Targets

Naming the file

Naming and running the make file.

I makefile - run with make

I Makefile - run with make

I give any filename - run as make -f < filename >

make picks the first target in the file and executes the commandsif the dependencies are more recent than the target.

Subhashini V Tutorial on make

Page 15: makefiles tutorial

Introduction Compiling Makefiles Example Extras Macros Naming Phony-Targets

Phony targets

Dummy targets to run commands. They don’t actually create files.

I make all

I make clean

I make tar

Use .PHONY or directly the name.

.PHONY: clean

clean:

\rm -f *.o *~ rsa

Or clean:

\rm -f *.o *~ rsa

Subhashini V Tutorial on make

Page 16: makefiles tutorial

Introduction Compiling Makefiles Example Extras

Makefile

OBJS = rsa.o main.o BigInt.o

CPP = g++

DEBUG = -g

CPPFLAGS = -Wall -c $(DEBUG)

LDFLAGS = -lm

rsa : $(OBJS)

$(CPP) $(LDFLAGS) $(OBJS) -o rsa

main.o : main.cpp BigInt.h rsa.h

$(CPP) $(CPPFLAGS) main.cpp -o $@

rsa.o : rsa.cpp rsa.h BigInt.h

$(CPP) $(CPPFLAGS) rsa.cpp -o $@

BigInt.o : BigInt.cpp BigInt.h

$(CPP) $(CPPFLAGS) BigInt.cpp -o $@

clean :

rm -f *.o *~ rsa

Subhashini V Tutorial on make

Page 17: makefiles tutorial

Introduction Compiling Makefiles Example Extras Default-rules Remarks

Automatic Variables

$@ , $<, $^

I $@ : used for the target variable.

I $< : the 1st prerequisite.

I $^ : is like “all the above” - all the prerequisites.

Subhashini V Tutorial on make

Page 18: makefiles tutorial

Introduction Compiling Makefiles Example Extras Default-rules Remarks

Default automatic rules to compile

Example-1

prog: foo.o foobar.o ...

<TAB> (nothing)

$(CPP) $(LDFLAGS) $^ -o $@

(if prog.o (or prog.c) is one of the prerequisites.)

Example-2

prog: prog.c prog.h

<TAB> (nothing)

$(CPP) $(CPPFLAGS) -c $< -o $@

Check these.

Subhashini V Tutorial on make

Page 19: makefiles tutorial

Introduction Compiling Makefiles Example Extras Default-rules Remarks

‘make’ from within the editor

Some editors like Vim allow you to call ‘make’ while still editingthe makefile :)

I :make - to run the Makefile.

To navigate through the errors and fix compilation issues fast, try

I :copen - Opens the quickfix window, to show the results ofthe compilation.

I :cnext or :cn - jump to the next error in source code.

I :cprev or :cp - jump to the previous error in source code.

Subhashini V Tutorial on make

Page 20: makefiles tutorial

Introduction Compiling Makefiles Example Extras Default-rules Remarks

Remarks

I Don’t forget to put the TAB before entering the command.

I Look at examples of Makefiles.

I Lots of tutorials and resources available online.

Subhashini V Tutorial on make

Page 21: makefiles tutorial

Introduction Compiling Makefiles Example Extras Default-rules Remarks

Questions?

Just make it.

Subhashini V Tutorial on make