make Προγραμματισμός II 1

Σχετικά έγγραφα
CE121 Προγραµµατισµός 2. Εισαγωγή σε Makefiles. CE121 -

CE121 Προγραµµατισµός 2. Εισαγωγή σε Makefiles. CE121 -

Μεταγλώττιση και σύνδεση πολλαπλών αρχείων κώδικα. Προγραμματισμός II 1

Προεπεξεργαστής C. Προγραμματισμός Ι 1

Προγραμματισμός Ι. Πολλαπλά Αρχεία. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Βιβλιοθήκες Αφηρημένοι τύποι δεδομένων. Προγραμματισμός II 1

(programming interfaceή/και application programming interface API).

Δομημένος Προγραμματισμός

Ενσωματωμένα Συστήματα

Ανάπτυξη Μεγάλων Εφαρµογών στη Γλώσσα C (2)

Το λειτουργικό σύστημα. Προγραμματισμός II 1

Προγραμματισμός Ι (ΗΥ120)

Εισαγωγή στον Προγραµµατισµό. Πανεπιστήµιο Θεσσαλίας Τµήµα Ηλεκτρολόγων Μηχανικών και Μηχανικών Η/Υ

Προγραμματισμός Ι. Προεπεξεργαστής. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Λειτουργικά Συστήματα 7ο εξάμηνο, Ακαδημαϊκή περίοδος

Περίληψη Φροντιστηρίου. Κατανεμημένα Συστήματα Ι. Το περιβάλλον DAP - Χαρακτηριστικά. Το περιβάλλον DAP Τι είναι.

Η γλώσσα προγραμματισμού C

Προεπεξεργαστής της C. C Preprocessor. Προγραμματισμός II 1

Εισαγωγή στο περιβάλλον προγραμματισμού του εργαστηρίου

Διάλεξη 2η: Αλγόριθμοι και Προγράμματα

Προγραμματισμός Ι (ΗΥ120)

ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ UNIX

Λειτουργικά Συστήματα (ΗΥ-345) Χειμερινό Εξάμηνο

ΕΡΓΑΣΤΗΡΙΟ 6: Συναρτήσεις και Αναδρομή

Διαδικαστικός Προγραμματισμός

Προγραμματισμός Ι (ΗΥ120)

double sum(double a, double b) { return(a+b); } double my_avg(double a, double b) { return(sum(a, b)/2.0); }

ΣΕΤ ΑΣΚΗΣΕΩΝ 2. Προθεσµία: 15/11/09, 23:59

Η-Υ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ. Εργαστήριο 1 Εισαγωγή στη C. Σοφία Μπαλτζή s.mpaltzi@di.uoa.gr

Προγραμματισμός Η/Υ 1 (Εργαστήριο)

Εισαγωγή στην Πληροφορική

Προγραµµατισµός Ι Εισαγωγή Πανεπιστήµιο Πελοποννήσου Τµήµα Πληροφορικής & Τηλεπικοινωνιών Προγραµµατισµός Ι Νικόλαος Δ. Τσελίκας

ΙΩΑΝΝΗΣ ΚΩΝΣΤΑΝΤΙΝΟΥ 2ο ΦΡΟΝΤΙΣΤΗΡΙΟ ΠΑΡΑΣΚΕΥΗ 26 ΟΚΤΩΒΡΙΟΥ 2012 ΑΙΘΟΥΣΑ Β4

Προγραμματισμός Συστημάτων

lab13grades 449 PASS 451 PASS PASS FAIL 1900 FAIL Page 1

Προγραμματισμός Υπολογιστών με C++

Διαδικασιακός Προγραμματισμός

Δομημένος Προγραμματισμός

Διάλεξη 22η: Επιπλέον στοιχεία της C

Το λειτουργικό σύστημα. Προγραμματισμός II 1

Προγραμματισμός Ι (ΗΥ120)

Π. Σταθοπούλου ή Οµάδα Α (Φοιτητές µε µονό αριθµό Μητρώου ) ιδασκαλία : Παρασκευή 11πµ-13µµ ΗΛ7

Ανάπτυξη και Σχεδίαση Λογισμικού

Λύβας Χρήστος Αρχική επιµέλεια Πιτροπάκης Νικόλαος και Υφαντόπουλος Νικόλαος

Προγραμματισμός Υπολογιστών με C++

Διαδικασία Ανάπτυξης Λογισμικού

Προγραμματισμός Ι (ΗΥ120)

Επεξεργασία Αρχείων Κειµένου

Δομημένος Προγραμματισμός

ΕΡΓΑΣΤΗΡΙΟ 3: Προγραμματιστικά Περιβάλλοντα και το Πρώτο Πρόγραμμα C

Το λειτουργικό σύστημα. Προγραμματισμός II 1

Εργαστήριο Λειτουργικών Συστημάτων. Minix Overview

Διάλεξη 12: Οργάνωση Προγραμμάτων σε Πολλαπλά Αρχεία ΙΙ

ΜΥΥ- 402 Αρχιτεκτονική Υπολογιστών Μεταγλώτιση, σύνδεση

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ & ΥΠΟΛΟΓΙΣΤΙΚΗ ΦΥΣΙΚΗ

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ

Προγραμματισμός Η/Υ (ΤΛ2007 )

ΑΣΚΗΣΗ 1: TO ΠΕΡΙΒΑΛΛΟΝ ΕΡΓΑΣΙΑΣ DEV-C++

Υλοποίηση ενός προγραμματιστικού κελύφους εργασίας

Εισαγωγή στο περιβάλλον προγραμματισμού του εργαστηρίου. Λειτουργικά Συστήματα Εργαστήριο Υπολογιστικών Συστημάτων ΕΜΠ

Γλώσσα Προγραμματισμού C++ Εισαγωγή - Μια πρώτη ματιά

Κεφάλαιο 6 ο Εισαγωγή στον Προγραμματισμό 1

Sheet2. - Άσκηση 1 οκ - Άσκηση 2 οκ. Σκέψου πώς θα µπορούσες να την

Προγραμματισμός I (Θ)

Προγραμματισμός H/Y Ενότητα 5: Συναρτήσεις. Επικ. Καθηγητής Συνδουκάς Δημήτριος Τμήμα Διοίκησης Επιχειρήσεων (Γρεβενά)

Προγραμματισμός Ι (ΗΥ120)

Κλήση Συναρτήσεων ΚΛΗΣΗ ΣΥΝΑΡΤΗΣΕΩΝ. Γεώργιος Παπαϊωάννου ( )

Διάλεξη 11: Οργάνωση Προγραμμάτων σε Πολλαπλά Αρχεία

Προγραμματισμός Ι (ΗΥ120)

ΔΗΜΙΟΥΡΓΙΑ & ΧΡΗΣΗ ΒΙΒΛΙΟΘΗΚΩΝ

ΚΕΦΑΛΑΙΟ 10 ΥΠΟΠΡΟΓΡΑΜΜΑΤΑ

Εισαγωγή στη γλώσσα προγραμματισμού C++

Θέτοντας και επιστρέφοντας την τιµή της προτεραιότητας διεργασίας

ΣΕΤ ΑΣΚΗΣΕΩΝ 3. Προθεσµία: 7/1/2014, 22:00

Προηγμένοι Μικροεπεξεργαστές. Εργαστήριο 6 C & Assembly

Προγραμματισμός Ι (ΗΥ120)

4. Συντακτικό μιας γλώσσας είναι το σύνολο των κανόνων που ορίζει τις μορφές με τις οποίες μια λέξη είναι αποδεκτή.

CloudBox!: Ένα εργαλείο cloud αποθήκευσης αρχείων με κατανεμημένο τρόπο

Λειτουργικά Συστήματα (Λ/Σ)

Εισαγωγή στην Πληροφορική

Κεφάλαιο 1 Εισαγωγή στη C

<<ΔΗΜΗΤΡΗΣ ΜΑΝΩΛΗΣ ΦΥΣΙΚΟΣ ΜCs>> 1

Δομημένος Προγραμματισμός (ΤΛ1006)

Εξοικείωση με το πρόγραμμα DEV C++ Επικοινωνία Χρήστη - Υπολογιστή

Η πρώτη παράμετρος είναι ένα αλφαριθμητικό μορφοποίησης

Δυναμική δέσμευση και αποδέσμευση μνήμης. Προγραμματισμός II 1

Συμβολική γλώσσα Εκπαιδευτικού Υπολογιστή - Λογισμικό Υπολογιστών

Κεφάλαιο : Εισαγωγή στην C: (Διαλέξεις 3-4)

Εισαγωγή στην γλώσσα προγραμματισμού C

Εισαγωγή στο προγραμματιστικό περιβάλλον ANSI

ΕΙΔΗ,ΤΕΧΝΙΚΕΣ ΚΑΙ ΠΕΡΙΒΑΛΛΟΝΤΑ ΠΡΟΓΡΑΜΜΑΤΙ- ΣΜΟΥ

ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΕΣ ΤΕΧΝΙΚΕΣ Σύντομη εισαγωγή στο εργαστήριο

Αντικειμενοστρεφής Προγραμματισμός

ΕΙΣΑΓΩΓΗ ΣΤΟ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ. Μερικές χρήσιμες οδηγίες

Προγραμματισμός Ι (HY120)

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ. Εισαγωγή στην FORTRAN. Δρ. Ιωάννης Λυχναρόπουλος

ΕΡΓΑΣΤΗΡΙΟ 1 ΕΙΣΑΓΩΓΗ ΣΤΗ C. Τµήµα Πληροφορικής και Τηλεπικοινωνιών

Οικονόμου Βαγγέλησ Διάλεξη Νο 2. Δομημένοσ Προγραμματιςμόσ - Διάλεξη 2

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ Ονοματεπώνυμο: Βαθμός:

#include <stdlib.h> Α. [-128,127] Β. [-127,128] Γ. [-128,128]

Transcript:

make Προγραμματισμός II 1 lalis@inf.uth.gr

myprog.c preprocessor (cc1) /tmp/cczxt.i assembler (as) compiler (cc1) /tmp/cczxt.o /tmp/cczxt.s linker (ld) myprog Προγραμματισμός II 2 lalis@inf.uth.gr

Δοκιμάστε gcc -E test.c > test.i gcc -S test.i (παράγει αρχείο.s) gcc -c test.s (παράγει αρχείο.o) gcc test.o -o test Προγραμματισμός II 3 lalis@inf.uth.gr

Διαδικασία μεταγλώττισης Η διαδικασία μεταγλώττισης ενός συστήματος λογισμικού μπορεί να είναι αρκετά πολύπλοκη Μεταγλώττιση από πολλά ξεχωριστά αρχεία Με συγκεκριμένη σειρά Σύνδεση με πολλές και διαφορετικές βιβλιοθήκες Οι παραπάνω επιλογές μπορεί να εξαρτώνται από διάφορες παραμέτρους π.χ. το σύστημα προορισμού (target platform) Δε χρειάζεται να μεταφράζονται εκ νέου αρχεία το περιεχόμενο των οποίων δεν έχει αλλάξει Προγραμματισμός II 4 lalis@inf.uth.gr

Παράδειγμα util uses main util.h: prototypes βοηθητικών συναρτήσεων util.c: υλοποιήσεις των παραπάνω συναρτήσεων main.c: κυρίως πρόγραμμα, που χρησιμοποιεί συναρτήσεις του util.h Προγραμματισμός II 5 lalis@inf.uth.gr

#include "util.h" int main (int argc, char *argv[]) { lowercase( ); main.c } compile, link, exec > gcc -Wall -c util.c > gcc -Wall -c main.c > gcc main.o util.o -o all >./all util.h char lowercase(char c); #include "util.h" #include<stdio.h> util.c char lowercase(char c) { } Προγραμματισμός II 6 lalis@inf.uth.gr

make Το εργαλείο (πρόγραμμα) make μπορεί να απαλλάξει τον προγραμματιστή από το να πρέπει να σκέφτεται και να πληκτρολογεί τις σωστές εντολές, κάθε φορά που πρέπει να παραχθεί κώδικας Το make μπορεί να εκτελέσει μια ή περισσότερες λειτουργίες (π.χ. μεταγλώττιση) με αυτόματο τρόπο Με βάση συγκεκριμένους κανόνες Οι κανόνες δίνονται σε ένα αρχείο, το Μakefile Περιγράφονται με μια συγκεκριμένη σύνταξη μια γλώσσα προγραμματισμού ειδικού σκοπού Προγραμματισμός II 7 lalis@inf.uth.gr

Στοιχεία Makefile Μεταβλητές: χρησιμοποούνται για ονόματα αρχείων, προγραμμάτων, flags κτλ. που εμφανίζονται σε πολλά σημεία του Makefile Κανόνες: αποτελούνται από το όνομα του στόχου (τι θέλουμε να δημιουργήσουμε) και τις σχετικές συνταγές παραγωγής (πώς το δημιουργούμε) Οι συνταγές χρησιμοποιούν shell commands Σχόλια: για τον συνηθισμένο λόγο... και πολλά άλλα (βλέπε manual) Προγραμματισμός II 8 lalis@inf.uth.gr

Εκτέλεση Makefile make <goal name> Το make ψάχνει στο τρέχοντα κατάλογο να βρει ένα αρχείο με όνομα Makefile (ή makefile) Ψάχνει να βρει τον στόχο μέσα στο Makefile Εκτελεί τις εντολές για το συγκεκριμένο στόχο Αφού πρώτα εκτελέσει ότι εντολές αντιστοιχούν σε προαπαιτούμενους στόχους (αναδρομή) make Όπως παραπάνω, αλλά εκτελεί τις εντολές για τον πρώτο στόχο που εμφανίζεται στο Makefile Προγραμματισμός II 9 lalis@inf.uth.gr

Κανόνες <target>: <dependencies> <command1> <command2>... <command> <target> (στόχος): αρχείο προς κατασκευή (συνήθως εκτελέσιμο) ή ενέργεια προς ολοκλήρωση <dependencies> (εξαρτήσεις): ένα ή περισσότερα αρχεία ή ενέργειες από τις οποίες εξαρτάται ο στόχος <command>: εντολή που στέλνει το make προς το shell για να δημιουργηθεί ο στόχος (το σύνολο των εντολών για ένα στόχο ονομάζεται και «συνταγή»). Προσοχή: tab πριν από κάθε εντολή Προγραμματισμός II 10 lalis@inf.uth.gr

#include "util.h" int main (int argc, char *argv[]) { lowercase( ); main.c } char lowercase(char c); #include "util.h" #include<stdio.h> util.h util.c main.o all util.o τελικός στόχος εξαρτήσεις char lowercase(char c) { } main.c util.h util.c Προγραμματισμός II 11 lalis@inf.uth.gr

all main.o util.o main.c util.h util.c all: main.o util.o gcc -Wall -g main.o util.o -o all Makefile main.o: main.c util.h gcc -Wall -g -c main.c util.o: util.c util.h gcc -Wall -g -c util.c Προγραμματισμός II 12 lalis@inf.uth.gr

all main.o util.o main.c util.h util.c all: main.o util.o gcc -Wall -g main.o util.o -o all Makefile main.o: main.c util.h gcc -Wall -g -c main.c util.o: util.c util.h gcc -Wall -g -c util.c Προγραμματισμός II 13 lalis@inf.uth.gr

all main.o util.o main.c util.h util.c all: main.o util.o gcc -Wall -g main.o util.o -o all Makefile main.o: main.c util.h gcc -Wall -g -c main.c util.o: util.c util.h gcc -Wall -g -c util.c Προγραμματισμός II 14 lalis@inf.uth.gr

all main.o util.o main.c util.h util.c all: main.o util.o gcc -Wall -g main.o util.o -o all Makefile main.o: main.c util.h gcc -Wall -g -c main.c util.o: util.c util.h gcc -Wall -g -c util.c Προγραμματισμός II 15 lalis@inf.uth.gr

all main.o util.o main.c util.h util.c all: main.o util.o gcc -Wall -g main.o util.o -o all Makefile main.o: main.c util.h gcc -Wall -g -c main.c util.o: util.c util.h gcc -Wall -g -c util.c Προγραμματισμός II 16 lalis@inf.uth.gr

all main.o util.o main.c util.h util.c all: main.o util.o gcc -Wall -g main.o util.o -o all Makefile main.o: main.c util.h gcc -Wall -g -c main.c util.o: util.c util.h gcc -Wall -g -c util.c Προγραμματισμός II 17 lalis@inf.uth.gr

all main.o util.o main.c util.h util.c all: main.o util.o gcc -Wall -g main.o util.o -o all Makefile main.o: main.c util.h gcc -Wall -g -c main.c util.o: util.c util.h gcc -Wall -g -c util.c Προγραμματισμός II 18 lalis@inf.uth.gr

all main.o util.o main.c util.h util.c all: main.o util.o gcc -Wall -g main.o util.o -o all Makefile main.o: main.c util.h gcc -Wall -g -c main.c util.o: util.c util.h gcc -Wall -g -c util.c Προγραμματισμός II 19 lalis@inf.uth.gr

all main.o util.o main.c util.h util.c all: main.o util.o gcc -Wall -g main.o util.o -o all Makefile main.o: main.c util.h gcc -Wall -g -c main.c util.o: util.c util.h gcc -Wall -g -c util.c Προγραμματισμός II 20 lalis@inf.uth.gr

all main.o util.o main.c util.h util.c all: main.o util.o gcc -Wall -g main.o util.o -o all Makefile main.o: main.c util.h gcc -Wall -g -c main.c util.o: util.c util.h gcc -Wall -g -c util.c Προγραμματισμός II 21 lalis@inf.uth.gr

all main.o util.o main.c util.h util.c all: main.o util.o gcc -Wall -g main.o util.o -o all Makefile main.o: main.c util.h gcc -Wall -g -c main.c util.o: util.c util.h gcc -Wall -g -c util.c Προγραμματισμός II 22 lalis@inf.uth.gr

all main.o util.o main.c util.h util.c all: main.o util.o gcc -Wall -g main.o util.o -o all Makefile main.o: main.c util.h gcc -Wall -g -c main.c util.o: util.c util.h gcc -Wall -g -c util.c Προγραμματισμός II 23 lalis@inf.uth.gr

all main.o util.o main.c util.h util.c all: main.o util.o gcc -Wall -g main.o util.o -o all Makefile main.o: main.c util.h gcc -Wall -g -c main.c util.o: util.c util.h gcc -Wall -g -c util.c Προγραμματισμός II 24 lalis@inf.uth.gr

Μεταβλητές <name> = <value> <name> (όνομα): το όνομα της μεταβλητής <value> (τιμή): ένα ή περισσότερα αρχεία ή ενέργειες από τις οποίες εξαρτάται ο στόχος αναφορές στο όνομα μιας μεταβλητής (μέσα σε άλλες εκφράσεις) γίνονται με $() Προγραμματισμός II 25 lalis@inf.uth.gr

CC = gcc CFLAGS = -Wall -g OBJ = main.o util.o all: $(OBJ) $(CC) $(OBJ) -o all main.o: main.c util.h $(CC) $(CFLAGS) -c main.c util.o: util.c util.h $(CC) $(CFLAGS) -c util.c Προγραμματισμός II 26 lalis@inf.uth.gr

Σχόλια Ξεκινούν με # και τελειώνουν στο τέλος της γραμμής Μπορούν να τοποθετηθούν (σχεδόν) οπουδήποτε Προγραμματισμός II 27 lalis@inf.uth.gr

CC = gcc CFLAGS = -Wall -g OBJ = main.o util.o #all object files #top-level goal all: $(OBJ) $(CC) $(OBJ) -o all main.o: main.c util.h $(CC) $(CFLAGS) -c main.c util.o: util.c util.h $(CC) $(CFLAGS) -c util.c Προγραμματισμός II 28 lalis@inf.uth.gr

Patterns και αυτόματες μεταβλητές Το σύμβολο $@ αναπαριστά το όνομα του στόχου Το σύμβολο % μπορεί να χρησιμοποιηθεί στο στόχο ή/και στις εξαρτήσεις) για να αναπαραστήσει μέρος του ονόματος ενός αρχείου Το σύμβολο $* αναπαριστά το κομμάτι του ονόματος που αντιστοιχεί στο % Προγραμματισμός II 29 lalis@inf.uth.gr

CC = gcc OBJ = foo.o bar.o all: $(OBJ) $(CC) $(OBJ) -o all foo.o: foo.c foo.h $(CC) -c foo.c CC = gcc OBJ = foo.o bar.o all: $(OBJ) $(CC) $(OBJ) -o $@ %.o: %.c %.h $(CC) -c $*.c bar.o: bar.c bar.h $(CC) -c bar.c Προγραμματισμός II 30 lalis@inf.uth.gr

Στόχοι που δεν είναι αρχεία.phony: clean clean: rm *.o Ένας κανόνας μπορεί οδηγεί σε οποιαδήποτε πράξη, όχι απαραίτητα στην μεταγλώττιση αρχείων Τότε ο στόχος δεν είναι όνομα αρχείου Συνήθως χρησιμοποιούμε το χαρακτηρισμό.phony για να αποφύγουμε «συγκρούσεις» με αρχεία που πιθανώς έχουν ίδιο όνομα με το στόχο Τυπική εφαρμογή: κανόνας για το σβήσιμο περιττών αρχείων μετά την ολοκλήρωση της μεταγλώττισης Προγραμματισμός II 31 lalis@inf.uth.gr

Στόχοι που δεν είναι αρχεία test%: test%.data myprog./myprog < test$*.data testall: test1 test2 test3 Ένας κανόνας μπορεί να αποτελείται μόνο από το στόχο και τις εξαρτήσεις Να μην έχει κάποιες εντολές (συνταγή) Προγραμματισμός II 32 lalis@inf.uth.gr

Σειρά εκτέλεσης all: target1 @echo zero output target1: target2 target3 @echo one target2: @echo two target3: @echo three Προγραμματισμός II 33 lalis@inf.uth.gr

Σειρά εκτέλεσης all: target1 @echo zero output target1: target2 target3 @echo one target2: @echo two target3: @echo three Προγραμματισμός II 34 lalis@inf.uth.gr

Σειρά εκτέλεσης all: target1 @echo zero output target1: target2 target3 @echo one target2: @echo two target3: @echo three Προγραμματισμός II 35 lalis@inf.uth.gr

Σειρά εκτέλεσης all: target1 @echo zero output target1: target2 target3 @echo one target2: @echo two target3: @echo three Προγραμματισμός II 36 lalis@inf.uth.gr

Σειρά εκτέλεσης all: target1 @echo zero output target1: target2 target3 @echo one target2: @echo two target3: @echo three Προγραμματισμός II 37 lalis@inf.uth.gr

Σειρά εκτέλεσης all: target1 @echo zero output target1: target2 target3 @echo one target2: @echo two target3: @echo three Προγραμματισμός II 38 lalis@inf.uth.gr

Σειρά εκτέλεσης all: target1 @echo zero target1: target2 target3 @echo one target2: @echo two target3: @echo three two output Προγραμματισμός II 39 lalis@inf.uth.gr

Σειρά εκτέλεσης all: target1 @echo zero target1: target2 target3 @echo one target2: @echo two target3: @echo three two output Προγραμματισμός II 40 lalis@inf.uth.gr

Σειρά εκτέλεσης all: target1 @echo zero target1: target2 target3 @echo one target2: @echo two target3: @echo three two output Προγραμματισμός II 41 lalis@inf.uth.gr

Σειρά εκτέλεσης all: target1 @echo zero two three output target1: target2 target3 @echo one target2: @echo two target3: @echo three Προγραμματισμός II 42 lalis@inf.uth.gr

Σειρά εκτέλεσης all: target1 @echo zero target1: target2 target3 @echo one two three one output target2: @echo two target3: @echo three Προγραμματισμός II 43 lalis@inf.uth.gr

Σειρά εκτέλεσης all: target1 @echo zero target1: target2 target3 @echo one two three one zero output target2: @echo two target3: @echo three Προγραμματισμός II 44 lalis@inf.uth.gr

Σειρά εκτέλεσης all: target1 @echo zero target1: target2 target3 @echo one target2: @echo two target3: @echo three two three one zero three two one zero output output Προγραμματισμός II 45 lalis@inf.uth.gr

Εντοπισμός εξαρτήσεων Βασική προϋπόθεση για να φτιαχτεί ένα σωστό Makefile είναι να καταγραφούν σωστά οι εξαρτήσεις για την κατασκευή ενός στόχου Π.χ., προϋπόθεση για την μεταγλώττιση ενός προγράμματος που χρησιμοποιεί μια βοηθητική βιβλιοθήκη, είναι το αντίστοιχο.h αρχείο gcc -MM <file names> Επιστρέφει μια λίστα εξαρτήσεων για τα αρχεία για να συμπεριληφθούν και τα system headers -M Προγραμματισμός II 46 lalis@inf.uth.gr

Συνηθισμένα λάθη Makefile:4: *** missing separator. δεν υπάρχει tab στην αρχή εντολής make: *** No rule to make target 'all'. δεν υπάρχει ο στόχος Makefile:7: warning: overriding commands for target 'test1' πολλές «συνταγές» για τον ίδιο στόχο Makefile:4: warning: ignoring old commands for target 'test1' εκτελείται όποια συνταγή είναι τελευταία επιτρέπεται να υπάρχουν πολλοί κανόνες για τον ίδιο στόχο (αλλά τότε πρέπει να έχουν μόνο εξαρτήσεις όχι συνταγές) Προγραμματισμός II 47 lalis@inf.uth.gr