Software Methods and Tools

Kenneth M. Anderson <kena@cs.colorado.edu>

Lecture 08: Software Tools and Build Management

Today's Lecture

Software Tools

Lessons Learned

Build Management

Unix Build Management

Specification/Modeling Styles

Make Specification Language

Example Makefile


Target1: Target2 Target3 … TargetN
  \t     Action1
  \t     Action2
  \t     …
  \t     ActionN

Target2: Target5 Target6
  \t     Action3

Target3: Target5 Target7
  \t     Action4


More on Make

Why use make?


#!/bin/bash
g++ -c main.cpp
g++ -c input.cpp
g++ -c output.cpp
g++ main.o input.o output.o -o program

A “Real” Makefile


program: main.o input.o output.o
    g++ main.o input.o output.o -o program

main.o: main.cpp defs.h
    g++ -c main.cpp

input.o: input.cpp defs.h
    g++ -c input.cpp

output.o: output.cpp defs.h
    g++ -c output.cpp

Examples

Given a directory with the following files and time stamps (higher number == newer)

File Time Stamp
main.cpp 1
input.cpp 2
defs.h 3
main.o 4

Example 1


main.o: main.cpp defs.h
    g++ -c main.cpp

Example 2


input.o: input.cpp defs.h
    g++ -c input.cpp

Example 3


output.o: output.cpp defs.h
    g++ -c output.cpp

What would happen if you typed “make” again after you ran example 2 for the first time?

Make Dependency Graph

Make Dependency Graph

make on the command line

More on Actions


clean:
    rm *.o

install: ~/csci3308/arch/i686/bin/program

~/csci3308/arch/i686/bin/program: program
    cp program ~/csci3308/arch/i686/bin

Action/Target mismatch


main.o: main.c
    lpr -Pakira ~/.cshrc

Summary

Coming Up Next