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

Σχετικά έγγραφα
make Προγραμματισμός II 1

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

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

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

Κεφάλαιο 3.1: Λειτουργικά Συστήματα. Επιστήμη ΗΥ Κεφ. 3.1 Καραμαούνας Πολύκαρπος

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

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

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

Εισαγωγή στην Επιστήμη Υπολογιστών. Εισαγωγή στο Λ.Σ. UNIX

Εργαστήριο ΤΟ ΛΕΙΤΟΥΡΓΙΚΟ ΣΥΣΤΗΜΑ UNIX

Δίκτυα Η/Υ στην Επιχείρηση

ΤΕΙ ΔΥΤΙΚΗΣ ΕΛΛΑΔΑΣ Τμήμα Μηχανικών Πληροφορικής ΤΕ Λειτουργικά Συστήματα (Εργαστήριο) Διδάσκων: I. Τσακνάκης. 8ο Εργαστήριο

Κεφάλαιο 4 Λογισμικό συστήματος. Εφαρμογές Πληροφορικής Κεφ.4 Καραμαούνας Πολύκαρπος 1

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

Εισαγωγή στο Bison. Μεταγλωττιστές, Χειμερινό εξάμηνο

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

Unix: Εντολές, οργάνωση και χειρισµός αρχείων, διεργασίες

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

Λειτουργικό σύστημα Unix

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

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

Οργάνωση ενός σύγχρονου Υπολογιστικού Συστήματος ή Ηλεκτρονικού Υπολογιστή (Η/Υ) Τα σύγχρονα συστήματα Η/Υ έχουν την παρακάτω οργάνωση:

Linux με τη χρήση κονσόλας

H ΓΛΩΣΣΑ C. Μάθηµα 1: Το Πρώτο µας Πρόγραµµα σε C. ηµήτρης Ψούνης

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

Σύντομη εισαγωγή στο λειτουργικό σύστημα Linux

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

Εισαγωγή στον Προγραμματισμό Μάθημα 1: Βασική Πλοήγηση σε Linux CLI. Οκτώβριος 2016 Χ. Αλεξανδράκη

PERL. Δήμος Παύλου Δημήτρης Κουζαπάς

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

Μερικές άλλες χρήσιμες εντολές

Εισαγωγή στην Επιστήμη της Πληροφορικής Εργαστήριο. UNIX Μέρος 1

Λειτουργικά Συστήματα Κεφάλαιο 2 Οργάνωση Συστήματος Αρχείων 2.1 Διαχείριση Αρχείων και Σύστημα Αρχείων(File System)

CYGWIN Οδηγίες Χρήσης (Συγγραφέας: Γιώργος ούκας)

Λειτουργικά Συστήματα (ΙΙ) (διαχείριση αρχείων)

Εργαστήριο ΔΙΑΧΕΙΡΙΣΗ ΑΡΧΕΙΩΝ & ΚΑΤΑΛΟΓΩΝ ΣΤΟ UNIX. Εισαγωγή

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

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

Εισαγωγή ΕΙΣΑΓΩΓΗ. Γεώργιος Παπαϊωάννου ( )

Ενότητα 3 - Θέματα Εφαρμοσμένης Επιστήμης Υπολογιστών. Κοντογιάννης Βασίλειος ΠΕ19

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

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

Κατανεμημένα Συστήματα

Ενότητα 1 Διάλεξη 1β

[11] Υπολογιστικά συστήματα: Στρώματα. Περιεχόμενα. Εισαγωγή. επικοινωνία εφαρμογές λειτουργικό σύστημα προγράμματα υλικό

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

ΕΠΛ 003: ΕΠΙΣΤΗΜΗ ΤΗΣ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΠΛΗΡΟΦΟΡΙΑΚΑ ΣΥΣΤΗΜΑΤΑ. Εισαγωγή στο Unix

Λειτουργικά Συστήματα Ι. Καθηγήτρια Παπαδάκη Αναστασία

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

Λειτουργικά. Συστήματα Ι. Φ ρ ο ν τ ι σ τ ή ρ ι ο. Αριστείδης Ηλίας. Εργαστήριο Ηλεκτρονικών Υπολογιστών

an:3 are:6 a:10

Ταχύτερα compile με ccache και distcc

Εισαγωγή στο περιβάλλον Code::Blocks

ΕΡΓΑΣΤΗΡΙΟ 2: Unix Tutorial

Λειτουργικό Σύστημα: διαχείριση πόρων. Τι είναι ένα αρχείο ; Διαχείριση αρχείων. Λειτουργικά Συστήματα (ΙΙ) (διαχείριση αρχείων)

Περί Προγραμματισμού και Γλωσσών Προγραμματισμού

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

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

Προγραµµατισµός 2 The shell

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

Εισαγωγή στα Λειτουργικά Συστήματα

Λειτουργικά Συστήματα - Εργαστήριο 6. 6ο Εργαστήριο. Συμπίεση αρχείων Χρήση ειδικών χαρακτήρων στην γραμμή εντολών. Χρήστες και Ομάδες Χρηστών

ΗY335: Δίκτυα Υπολογιστών Χειμερινό Εξάμηνο Τμήμα Επιστήμης Υπολογιστών Πανεπιστήμιο Κρήτης Διδάσκουσα: Μαρία Παπαδοπούλη

Λειτουργικό Σύστημα: διαχείριση πόρων. Διαχείριση αρχείων. Τι είναι ένα αρχείο ; Λειτουργικά Συστήματα (ΙΙ) (διαχείριση αρχείων)

Μαλούτα Θεανώ Σελίδα 1

Εργαστήριο Λειτουργικών Συστημάτων Ακ. Έτος Άσκηση 4. Πλήθος οπών <tab> Μέσο μέγεθος σε mb

ΠΛΗΡΟΦΟΡΙΚΗ Ι Εργαστήριο 1 MATLAB ΠΛΗΡΟΦΟΡΙΚΗ Ι ΕΡΓΑΣΤΗΡΙΟ 1. Θέμα εργαστηρίου: Εισαγωγή στο MATLAB και στο Octave

Αρχιτεκτονικές Δικτύων & Πρωτόκολλα Ι

Προγραμματισμός και Χρήση Ηλεκτρονικών Υπολογιστών - Βασικά Εργαλεία Λογισμικού

Τυπικές χρήσεις της Matlab

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

Βρίγκας Μιχαήλ Α.Μ.744 Μπράχος Χ. Ευάγγελος Α.Μ.795

Εισαγωγή στον Προγραμματισμό

Αγροτική Ανάπτυξη Περιβάλλον

Προγραμματισμός Ι. Εργαστήριο 1 ο Περιβάλλον Εργασίας. Νικόλαος Δ. Τσελίκας Κυριακή Θ. Σεκλού

Η εντολή ln. σύνδεση με την πραγματική καταχωρημένη πληροφορία. περισσότερα ονόματα (συνδέσεις). Τα επιπλέον ονόματα δημιουργούνται με

ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΠΛΗΡΟΦΟΡΙΚΗ (TP-105)

ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ ΙΙ - UNIX. Συστήματα Αρχείων. Διδάσκoντες: Καθ. Κ. Λαμπρινουδάκης Δρ. Α. Γαλάνη

Προγραμματισμός Διαχείρισης Συστημάτων Ι

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

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

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

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

Εισαγωγή στον Προγραμματισμό Εργαστήριο 3: Βοηθητικά προγράμματα του Linux CLI. Οκτώβριος 2014 Χ. Αλεξανδράκη Γ. Δημητρακάκης

Λειτουργικά Συστήματα Ι. Κεφάλαιο 1 Βασικές Έννοιες Λειτουργικών Συστημάτων

Εισαγωγή. Διαλέξεις στο μάθημα: Μεταφραστές Γιώργος Μανής

Πρόγραμμα Πιστοποίησης Γνώσεων και Δεξιοτήτων H/Y ΕΝΟΤΗΤΑ 1: «ΒΑΣΙΚΕΣ ΕΝΝΟΙΕΣ ΠΛΗΡΟΦΟΡΙΚΗΣ»

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

2.1. Οι λογαριασµοί χρηστών Σύνδεση (login) και αποσύνδεση (logout)

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

Μεταφραστής (Compiler)

ΤΕΙ ΙΟΝΙΩΝ ΝΗΣΩΝ ΣΧΟΛΗ ΔΙΟΙΚΗΣΗΣ ΚΑΙ ΟΙΚΟΝΟΜΙΑΣ ΤΜΗΜΑ ΔΙΟΙΚΗΣΗΣ ΕΠΙΧΕΙΡΗΣΕΩΝ - ΕΙΣ

Κεφάλαιο 2: Μεταφραστές

Λιβανός Γιώργος Εξάμηνο 2017Β

FORTRAN & Αντικειμενοστραφής Προγραμματισμός ΣΝΜΜ 2017

Λειτουργικά Συστήµατα

Μικρή Εισαγωγή στο wxdev-c++

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

ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ. Επισκόπηση Λ.Σ. Εργαστηριακές Ασκήσεις

Transcript:

ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ UNIX Περιεχόμενα ΕΙΣΑΓΩΓΗ... 1 Τι είναι το Unix?... 1 1.2 Ο πυρήνας (kernel)... 1 1.3 O φλοιός (shell)... 1 2EΝΤΟΛΕΣ ΣΤΟ UNIX... 2 3 Compiling προγράμματα της C στα UNIX.... 3 3.1 gcc compiler... 3 3.2 Compiling μεγάλα πρόγραμματα που βρίσκoνται σε διαφορετικά αρχεία... 5 3.3 Η Εντολή Make... 5 3.4 Makefile... 6 ΕΙΣΑΓΩΓΗ Τι είναι το Unix? Tα UNIX είναι ένα λειτουργικό σύστημα που αναπτύχθηκε κυρίως από το 1960 και μετά και συνεχίζει να αναπτύσσεται ακόμα και σήμερα. Περιέχει ένα graphical user interface (GUI) παρόμοιο με αυτό των Microsoft Windows παρέχοντας ένα φιλικό προς τον χρήστη περιβάλλον. Υπάρχουν πολλές διαφορετικές εκδόσεις UNIX ανά τον κόσμο. Οι ποιο δημοφιλείς είναι Sun Solaris, GNU/Linux, και MacOS X. Tα Unix αποτελούνται απο τρία μέρη τον πυρήνα (kernel), τον φλοιό (shell) και τα προγράμματα. 1.2 Ο πυρήνας (kernel) Το πρόγραμμα που χρησιμοποιείται για να συνδέει τον χρήστη με την καρδία του UNIX που είναι ο πυρήνας(kernel).o πυρήνας φορτώνεται στην μνήμη με το ξεκίνημα του υπολογιστή και διαχειρίζεται το σύστημα μας μέχρι αυτο να σβήσει.μερικές απο τις λειτουργίες του είναι να δημιουργεί και να ελέγχει διεργασίες, να ελέγχει την μνήμη και τα συστήματα αρχείων καθώς και τους πόρους του συστήματος.όταν εμείς συνδεόμαστε ο πυρήνας φορτώνει τα προγράμματα στην μνήμη και καθαρίζει το σύστημα όταν αποσυνδεόμαστε. 1.3 O φλοιός (shell) Ο φλοιός είναι υπεύθυνος για να εξασφαλίσει οτι οι εντολές που θα εισαχθούν απο τον χρήστη στο σύστημα μας θα εκτελεστούν κανονικά.ξεκινάει μετα την διαδικασία εισόδου του χρήστη στο σύστημα και συνεχίζει να τρέχει σαν μια διεργασία μέχρι αυτός να βγεί.μερικές απο τις δυνατότητες που προσφέρει είναι : Δίνει την συνατότητα στον χρήστη να προσαρμόσει το σύστημα σύμφωνα με τις δικές του επιθυμίες Κάνει αποθήκευση των ποιο πρόσφατων εντολών για την διευκόλυνση του χρήστη. Κάνει διαχείριση εργασιών ωστε να μπορούμε να δημιουργίσουμε νέες, να τις εκτελέσουμε και να τις τερματίσουμε. Παρέχει την δυνατότητα σύντμησης μεγάλων ονομάτων και εντολών 1

Μας δύνεται η δυνατότητα να γράφουμε προγράμματα τα οποία ονομάζονται scripts και εκτελούνται σαν εντολές. 2EΝΤΟΛΕΣ ΣΤΟ UNIX arch εμφανίζει την αρχιτεκτονική του συστήματός μας. kill τερματίζει μία η περισσότερες διεργασίες ps μας δείχνει όλες τις τρέχουσες διεργασίες στο τερματικό. who επιστρέφει τον κατάλογο των χρηστών που είναι συνδεδεμένοι στο σύστημα. date επιστρέφει την ημερομηνία και ώρα συμφώνα με το ρολόι του συστήματος μας. chmod αλλάζει τα δικαιώματα προσπέλασης σε ένα αρχείο. chmod τριψήφιος οκταδικός αριθμός filename chmod [user_specifier] mode_change_specifier filename Στην πρώτη περίπτωση υπάρχουν οι εξής κανόνες: το πρώτο οκταδικό ψηφίο αναφέρεται στον ιδιοκτήτη του αρχείου, το δεύτερο στην ομάδα (group) όπου ανήκει ο ιδιοκτήτης του αρχείου και το τρίτο στους υπόλοιπους χρήστες. Σε κάθε ψηφίο π ροσθέτουμε 4 αν θέλουμε να δώσουμε δικαίωμα ανάγνωσης, 2 αν θέλουμε να δώσουμε δικαίωμα εγγραφής και 1 αν θέλουμε να δώσουμε δικαίωμα εκτέλεσης (το δικαίωμα εκτέλεσης για έναν κατάλογο έχει το νόημα ότι μπορού με να κάνουμε τον κατάλογο αυτό τρέχοντα κατάλογο εργασίας). Στη δεύτερη περίπτωση το (προαιρετικό) όρισμα user_specifier καθορίζει σε ποιον εφαρμόζεται η αλλαγή των π ρονομίων (u = owner ο ιδιοκτήτης, g = group η ομάδα όπου ανήκει ο ιδιοκτήτης, o = other οι υπόλοιποι χρήσ τες) και το mode_change_specifier δείχνει ποια αλλαγή θα επέλθει (+r, -r, +w, -w, +x, - x) cat [-options] [filename(s)] βλέπουμε τα περιεχόμενα ενός αρχείου κειμένου και ανάλογα με τα ορίσματα που θα εισάγουμε έχουμε : -b τυπώνει αιθμούς γραμμών και παραβλέπει τις κενές γραμμές -s οπου έχει πολλα κενά τα αντικαθιστά με ένα -n τυπώνει αριθμούς γραμμών αλλα δεν αγνοεί τις κενές γραμμές -v δείχνει τους χαρακτήρες που δεν μπορούν να τυπωθούν σαν αριθμούς Αν δεν εισάγουμε κάποιο όρισμα απλα τυπώνει στην οθόνη μας ότι πληκτρολογήσουμε. cp file1 file2 αντιγράφει το αρχείο file1 στο file2.εαν το αρχείο file2 δεν υπάρχει το δημιουργεί. diff file1 file2 συγκρίνει τα δυο αρχεία και μας δίνει ως έξοδο τις διαφορές τους. mv file1 file2 αλλάζει το όνομα του file1 σε file2. 2

clear καθαρίζει την οθόνη του υπολογιστή μας. gcc [ options] [filename(s)] GNU compiler κατάλληλος για να κάνει compile προγράμματα γραμμένα σε C, C++, Fortran γλώσσες. ls - Ένας κατάλογος περιέχει πολλά αρχεία και για να δούμε τα ονόματά τους χρησιμοποιού με την εντολή ls.αν δώσουμε ορίσματα, τότε αν κάποιο από αυτά είναι αρχείο, η ls θα μας παρουσιάσει το όομά του, ενώ αν είναι κατάλογος θα μας δώσει τα ονόματα των αρχείων και καταλόγων που υπάρχουν σε αυτόν. ln [options] [filename(s)] - Με την εντολή αυτή μπορούμε να αναφερόμαστε σε ένα αρχείο με πολλά ονόματα ή απο διαφορετικούς καταλόγους 3 Compiling προγράμματα της C στα UNIX. 3.1 gcc compiler Ο μεταγλωττιστής GNU CC ποιό γνωστός ως GCC μπορεί να κάνει μεταγλώττιση σε προγράμματα γραμμένα σε C και C++.Ο Gcc μας δείνει την δυνατότητα ανα πάσα στιγμή να διακόψουμε την διαδικασία της μεταγλώττισης εισάγοντας τις κατάλληλες εντολές. Aς πάρουμε ένα παράδειγμα: Υποθέτουμε οτι έχουμε το παρακάτω πρόγραμμα hello.c που θέλουμε να κάνουμε compile απο τα Unix. Η εντολή που θα πληκτρολογίσουμε στο command line θα είναι : $ gcc hello.c Αφού το πρόγραμμα περάσει με επιτυχία το compile το αποτέλεσμα θα είναι ένα αντικείμενο πρόγραμμα με την ονομασία a.out.η αλλαγή του ονόματος του εκτελέσιμου προγράμματος μας μπορεί να γίνει κατα το compile αντικαθιστώντας την παραπάνω εντολή με : $gcc hello.c o hello Για να τρέξουμε το πρόγραμμα μας δεν έχουμε παρα να πάμε στο directory που βρίσκεται το εκτελέσιμο αρχείο και να πληκτρολογίσουμε : $./ hello Tο πρόγραμμα μας θα εκτελεστεί και στην οθώνη μας θα έχουμε 3

Κατα την διαδικασία της μεταγλώττισης το πρόγραμμα μας περνάει απο τέσσερα στάδια που είναι: Preprocessing Compilation Assembly Linking Preprocessor Options -E περναέι το πρόγραμμα μας απο την διαδικασία του preprocess χωρίς να αφήνει τον compiler να συνεχίσει στα επόμενα στάδια -M παρέχει εξαρτήσεις για την εντολή make -C κρατάει τα σχόλια του προγράμματος και στο output αρχείο που δημιουργεί Compiler Options -c κάνει μόνο compile το αρχείο και δεν προχωραεί στο επόμενο στάδιο -S στέλνει στον assembler ένα αρχείο, το νέο αρχείο που θα δημιουργηθεί θα έχει κατάληξη.s -w δεν εμφανίζει warnings -W παράγει warnings για κάποιες παρενέργεις που μπορεί να δημιουργεί μια συνάρτηση που καλείται απο το πρόγραμμα(πχ δυσλειτουργία κάποιας συνάρτησης) -Ι ορίζει ένα μονοπάτι για κάποιες επιπλέον βιβλιοθήκες -g (-gcoff, -gstabs, -gxcoff, gdwarff ) συμπεριλαμβάνει πληροφορίες για debug (μπορεί να προσδιορίζει κάποιον debugger) -static κάνει link μια static βιβλιοθήκη με το προγραμμά μας -shared σε περίπτωση που υπάρχει δυνατότητα επιλέγει, μια κοινή βιβλιοθήκη απο μια static Assembler Options Για να περαστούν οδηγίες στον assembler χρειάζονται οι εντολές να έχουν την εξής μορφη gcc Wa, -options. -ahl δημιουργεί πηγαίο κώδικα σε υψηλό επίπεδο assembly πχ. gcc Wa, -ahl warnings.c -as δημιουργεί μια λίστα με σύμβολα πχ. gcc Wa, -as warnings.c Linker options -l default ονομασία βιβλιοθήκης -I (dirname) ορίζεται το μονοπάτη για το πού θα ψάξει ο gcc για include αρχεία πχ $gcc project.c-i/home/user/include o project 4

-L (dirname)oρίζεται μονοπάτη για το που θα ψάξει ο compiler για βιβλιοθήκη πχ $ gcc project.c L/home/user/lib -lnew o project Oλες οι οδηγίες προς τον gcc compiler που δεν έχουν εκτελεστεί στα ανώτερα στάδια περνάνε στην διαδικασία linking. 3.2 Compiling μεγάλα πρόγραμματα που βρίσκoνται σε διαφορετικά αρχεία. Πολλές φορές κάποιο project που θέλουμε να κάνουμε compile βρίσκεται σε περισσότερα από ένα αρχεία (ας πούμε οτι χωρίζεται σε δύο και έχουν την ονομασία file1.c και file2.c ) με την βοήθεια των παρακάτω εντολών: $ gcc file1.c file2.c o program To ίδιο αποτέλεσμα μπορεί να επιτευχθεί και με τις ακόλουθες εντολές $ gcc file1.c $ gcc file2.c $ gcc file1.o file2.o o program Το πλεονέκτημα της τελευταίας μεθόδου είναι οτι κάνει compile κάθε πρόγραμμα ξεχωριστά και μετά δημιουργείται το αντικείμενο πρόγραμμα. Εαν αφού δημιουργήσαμε το program.o θέλουμε να αλλάξουμε το file1.c για κάποιο λόγο τότε το αρχείο file2.c δεν χρειάζεται να ξαναγίνει compile.σε περίπτωση που μπορούσαμε να γλυτώσουμε αυτήν την μεταγλώττιση τότε ο χρόνος που θα χρειάζεται για να γίνει rebuild το program θα είναι μικρότερος απο οτι στην αρχή.σε μεγάλα projects που αποτελούνται απο εναν μεγάλο αριθμό απο προγράμματα μια τέτοια διαχείρηση μπορεί να φανεί πολύ αποδοτική αφού θα μας γλείτωνε απο περιττές μεταγλωτίσεις.τα Unix για την αυτοματοποίηση αυτής της διαδικασίας έχουν κατάλληλες εντολές τις οποίες θα αναλύσουμε και ποιο κάτω,. 3.3 Η Εντολή Make Η εντολή make μας αυτοματοποιεί την διαδικασία όταν έχουμε να διαχειριστούμε ένα μεγάλο project με πολλά αρχεία πηγαίου κώδικα. Το make είναι ένα εργαλείο αυτοματοποίησης μιας διαδικασίας πολλών βημάτων, σαν τα shell scripts ή τα batch files στα Windows συστήματα. Η διαφορά του make και το σημείο στο οποίο υπερτερεί από τα προηγούμενα, είναι η χρήση των εξαρτήσεων. Έστω ότι έχουμε ένα κλασικό project γραμμένο σε C που αποτελείται από τα εξής αρχεία: $ compiler.c $ tokens.h $ lexer.l $ parser.y $ common.h $ seman.c $ symbol.h $ symbol.c 5

Για να δημιουργηθεί το τελικό εκτελέσιμο, πρέπει να εκτελεστούν με την σειρά οι παρακάτω εντολές: $ flex lexer.l -o lexer.c $ bison parser.y -o parser.c $ gcc -c lexer.c -o lexer.o $ gcc -c parser.c -o parser.o $ gcc -c seman.c -o seman.o $ gcc -c symbol.c -o symbol.o $ gcc -c compiler.c -o compiler.o $ gcc -lfl lexel.o parser.o seman.o symbol.o compiler.o -o compiler Δεν είναι και λίγες για να τις πληκτρολογούμε κάθε φορά που θέλουμε να κάνουμε κάποια αλλαγή σε ένα αρχείο. Μια ιδέα θα ήταν να τις βάλουμε όλες μαζί σε ένα script.αυτό όμως έχει το μειονέκτημα ότι αν κάνουμε μια αλλαγή σε ένα μόνο αρχείο θα ξαναεκτελεστούν όλες οι εντολές από την αρχή και δεν θα αξιοποιηθεί η πληροφορία ότι μια αλλαγή στο compiler.c θα επηρεάσει μόνο το compiler.o και το τελικό compiler. Αυτό το κενό έρχονται να καλύψουν οι εντολές make και makefile. 3.4 Makefile Το make χρειάζεται ένα αρχείο ρυθμίσεων που περιέχει τις εντολές. Αυτό λέγεται Makefile και είναι οργανωμένο σε ενότητες που λέγονται rules. Κάθε rule αναφέρεται σε (τουλάχιστον) ένα target. Ένα target είναι ένας στόχος, συνήθως η δημιουργία ενός αρχείου, που πρέπει να πετύχει το make στην διαδικασία του build. Για την επίτευξη ενός στόχου πρέπει να εκτελεστούν κάποιες εντολές και πιθανόν να πρέπει να ικανοποιηθούν κάποιοι άλλοι στόχοι πρώτα, τα λεγόμενα prerequisites: # Structure of the Makefile rule target: prerequisite_1 prerequisites_2 command 1 command 2... command Ν Ο κανονας οριζει τρια πραγματα. το ονομα του αρχείου που πρεπει να ανανεωθεί (στοχος - target), ποτε πρεπει να ανανεωθει (εξαρτησεις - dependencies) και πως θα ανανεωθει (ενεργειες - actions).έτσι στο παράδειγμά μας για να δημιουργηθεί το τελικό εκτελέσιμο compiler φτιάχνουμε ένα rule με target με το ίδιο όνομα και ορίζουμε τα prerequisites και τις εντολές που πρέπει να εκτελεστούν ώστε να ικανοποιηθεί αυτός ο στόχος, δηλαδή η δημιουργία του compiler: compiler: lexer.o parser.o seman.o symbol.o compiler.o gcc -lfl lexer.o parser.o seman.o symbol.o compiler.o -o compiler Με το υποχρεωτικό <tab> που υπάρχει στην αρχή κάθε εντολής ξεχωρίζουν οι εντολές που πρέπει να εκτελεστούν για κάθε rule. Με παρόμοιο τρόπο δημιουργούμε τα targets για τα υπόλοιπα αρχεία με τις εντολές που χρειάζεται το καθένα και τα prerequisites του. Το τελικό Makefile έχει ως εξής: 6

Makefile: lexer.c: lexer.l flex lexer.l -o lexer.c parser.c: parser.y bison parser.y -o parser.c lexer.o: lexer.c tokens.h common.h gcc -c lexer.c -o lexer.o -Wall parser.o: parser.c tokens.h common.h gcc -c parser.c -o parser.o -Wall seman.o: seman.c common.h gcc -c seman.c -o seman.o -Wall symbol.o: symbol.c symbol.h common.h gcc -c symbol.c -o symbol.o -Wall compiler.o: compiler.c gcc -c compiler.c -o compiler.o -Wall compiler: lexer.o parser.o seman.o symbol.o compiler.o gcc -lfl lexer.o parser.o seman.o symbol.o compiler.o -o compiler Μπορούμε τώρα να εκτελέσουμε την εντολή make compiler και να δημιουργήσουμε το εκτελέσιμό μας. Βλέπουμε ότι έχουμε προσθέσει την επιπλέον πληροφορία των prerequisites και ότι έτσι μπορεί το make να ξέρει ότι όταν αλλάξει το αρχείο tokens.h δεν χρειάζεται να ξαναδημιουργήσει όλα τα αρχεία από την αρχή αλλά μόνο αυτά που εξαρτώνται, εμμέσως ή αμέσως, από αυτό (στην περίπτωσή μας θα ξαναεκτελεστούν οι κανόνες για τους στόχους lexer.o parser.o και compiler). 7