lukasz.proszek.info

Powrót do listy plików

Makefile

#==============================================================================
# make all, cw3.run,cw3b.run, clean, dist
#==============================================================================
DIR = cw3
# Nazwy, ktorych bedziemy uzywac, tu: rdzenie nazw plikow
NAME1 = cw3
NAME2 = cw3b
# Program wykonawczy: dodajemy rozszerzenie .x, ale moze byc dowolne.
EXEC1  = $(NAME1).run
EXEC2  = $(NAME2).run
# Pliki powstale po kompilacji plikow zrodlowych, tzw. object files
OBJS1  = $(NAME1).o
OBJS2  = $(NAME2).o
# Dolaczane biblioteki (poza standardowymi). 
# Makra moge byc puste, np. przewidziane na przyszlosc.
LIBS1  = 
LIBS2  = 
# Pliki naglowkowe
HEADS1 = $(NAME1).h
HEADS2 = $(NAME1).h
# Opcje kompilatora i linkera
CFLAGS = -Wall -O 
LFLAGS = -Wall -O
# Kompilator i linker (czesto ta sama nazwa)
CO = gcc
LD = $(CO)

%.o: %.c %.h
  $(CO) $(CFLAGS) -c $<
###############################################################################
# Regula zaleznosci - uaktualnij pliki po prawej stronie dwukropka.
# Na ogol zakladamy, ze w danym katalogu nie ma pliku o nazwie all,
# tzn. ze dana regula zawsze sie wykona. 
# Gdyby plik o takiej nazwie przypadkowo znalazl sie w danym katalogu,
# to mozna wymusic bezwzgledne wykonanie sie ponizszej reguly wpisujac
# nazwe celu po slowie .PHONY:, np.
.PHONY: all
all: $(EXEC1) $(EXEC2)
###############################################################################
# Jawna regula zaleznosci - najpierw uaktualnij pliki po prawej stronie 
# dwukropka, a potem wykonaj komende, ktora jest w nastepnej linijce (tu:
# wykonaj linkowanie). 
# Zmienna wewnetrzna $@ oznacza cel, tzn. obiekt, ktory jest po lewej stronie 
# dwukropka, tu: $(EXEC) 
$(EXEC1): $(OBJS1) $(LIBS1) 
  $(LD) -o $@ $(LFLAGS) $(OBJS1) $(LIBS1)
$(EXEC2): $(OBJS2) $(LIBS2) $(EXEC1) 
  $(LD) -o $@ $(LFLAGS) $(OBJS2) $(LIBS2)
###############################################################################

###############################################################################
# Aby zapewnic bezwzgledne wykonanie niezaleznie czy istnieja pliki o danych
# nazwach (podobie jak dla all). Jezeli jestesmy pewni, ze plikow o takich
# nazwach nie bedzie w danym katalogu, to mozemy pominac ponizsza deklaracje.
.PHONY: clean dist
# run
# Uruchom program $(EXEC1); najpierw sprawdz, czy kod wykonawczy jest aktualny
#run: $(EXEC1)
run1: $(EXEC1)
  ./$(EXEC1)
#
run2: $(EXEC2)
  ./$(EXEC2)
# czyszczenie (tez "phony target")
clean:                                                     
  rm -f *.o  *~ *.run core a.out
# Archiwizacja i kompresja
dist: clean
  (cd ../; tar -cvzf $(DIR).tar.gz  $(DIR) )

składania pokolorowana przez Code2HTML, v. 0.9.1