Ένας υπάλληλος της Red Hat παρουσίασε το σύστημα συναρμολόγησης Goals. Κυκλοφορία του GNU Make 4.2

Richard WM Jones, συγγραφέας libguestfsεργάζεται στην Red Hat, εισήχθη νέο βοηθητικό πρόγραμμα συναρμολόγησης Στόχοι, με στόχο την εξάλειψη των ελλείψεων και των προβλημάτων στη χρησιμότητα του make διατηρώντας παράλληλα τη συνολική απλότητα και κατανοητό των σεναρίων. Το βοηθητικό πρόγραμμα make σχεδιάστηκε το 1976 και έχει μια σειρά από εννοιολογικές ελλείψεις· η Goals σχεδιάζει να εξαλείψει αυτές τις ελλείψεις χωρίς να αλλάξει τη γενική ιδέα.
Πηγαίος κώδικας στόχων διανέμονται από άδεια σύμφωνα με το GPLv2+.

Προβλήματα προς επίλυση:

  • Υποστήριξη μόνο για μία τακτική επίλυσης εξαρτήσεων - "η εντολή συναρμολόγησης εκτελείται εάν το αρχείο προορισμού λείπει ή είναι παλαιότερο από μία από τις εξαρτήσεις." Η Goals σχεδιάζει να εφαρμόσει άλλες τακτικές, όπως ο έλεγχος για την παρουσία μιας διεύθυνσης URL, η σύγκριση των χρόνων τροποποίησης με οποιοδήποτε αρχείο, η αξιολόγηση του ενσωματωμένου πακέτου Κότζι, σύγκριση αθροισμάτων ελέγχου, εκτέλεση δοκιμαστικών περιπτώσεων με επιλεκτική παράκαμψη δοκιμών.
  • Κατά την επεξεργασία στόχων κατασκευής, το make δεν διαχωρίζει αρχεία και ονόματα κανόνων και, ως εκ τούτου, δεν υπάρχει έλεγχος ότι κατά την εκτέλεση ενός κανόνα, το αρχείο που ισχυρίζεται ότι δημιουργήθηκε θα δημιουργηθεί πραγματικά. Για παράδειγμα, εάν έχετε έναν κανόνα που ονομάζεται "test" που εκτελεί σενάρια με δοκιμές, ένα αρχείο με το όνομα "test" έχει δημιουργηθεί κατά λάθος, τότε οι δοκιμές δεν θα καλούνται πλέον, καθώς η make θα θεωρήσει ότι ο στόχος είναι κατασκευασμένος και δεν απαιτεί οποιαδήποτε ενέργεια (για να επιλύσετε το πρόβλημα στη μάρκα, μπορείτε να καθορίσετε την οδηγία ".PHONY: δοκιμή"). Οι στόχοι διαχωρίζουν ρητά τα ονόματα αρχείων και κανόνων.

    Ένας υπάλληλος της Red Hat παρουσίασε το σύστημα συναρμολόγησης Goals. Κυκλοφορία του GNU Make 4.2

  • Πρόβλημα με την παροχή μόνο μιας παραμέτρου για οδηγίες συναρμολόγησης.

    Ένας υπάλληλος της Red Hat παρουσίασε το σύστημα συναρμολόγησης Goals. Κυκλοφορία του GNU Make 4.2

    Οι στόχοι σάς επιτρέπουν να χρησιμοποιείτε έναν αυθαίρετο αριθμό ονομασμένων παραμέτρων. Για παράδειγμα, μπορείτε να εξαγάγετε ξεχωριστά το σύμβολο ενός αρχείου εντοπισμού σφαλμάτων από το όνομα:

    Ένας υπάλληλος της Red Hat παρουσίασε το σύστημα συναρμολόγησης Goals. Κυκλοφορία του GNU Make 4.2

  • Προβλήματα αλληλεπίδρασης με τον διερμηνέα κελύφους. Για παράδειγμα, η ανάγκη ελέγχου της διαφυγής των χώρων στα ονόματα αρχείων και καταλόγων, η σπατάλη πόρων για την εκκίνηση ενός ξεχωριστού διερμηνέα φλοιού κατά την εκτέλεση κάθε εντολής, η διπλή ερμηνεία του χαρακτήρα «$» (χρησιμοποιείται τόσο στο φλοιό όσο και στο make), λαμβάνοντας υπόψη τις εσοχές.

    Αυτά τα προβλήματα επιλύονται στους στόχους χρησιμοποιώντας το σύμβολο "%" αντί για "$" για μεταβλητές συναρμολόγησης (το "$" παραμένει μόνο για το κέλυφος), χρησιμοποιώντας έναν αναλυτή LALR(1), το οποίο απαιτεί να περιβάλλετε μονοπάτια και ονόματα αρχείων με εισαγωγικά και να επισημάνετε μπλοκ κώδικα με σγουρά άγκιστρα. Ολόκληρο το μπλοκ εντολών εκκινείται σε μία παρουσία του κελύφους εντολών και εντός του μπλοκ επιτρέπεται η αυθαίρετη μορφοποίηση κώδικα, χωρίς αναφορά σε ειδικά κενά.

    Ήταν:
    στόχος: foo.o bar.o
    ${CC} ${CFLAGS} $< -o $@

    Εγινε:
    "target": "foo.o", "bar.o" {
    %CC %CFLAGS %< -o %@
    }

Άλλα χαρακτηριστικά των Στόχων:

  • Προαιρετική υποστήριξη για τον καθορισμό αυθαίρετων ονομάτων και παραμέτρων:

    στόχος όλα = : "στόχος"

    σύνδεσμος στόχου =
    "target" : "foo.o", "bar.o" { ... }

    στόχος μεταγλωττίζω (όνομα) =
    "%name.o" : "%name.c", "dep.h" { %CC %CFLAGS -c $^ -o $@ }

  • Δύο τρόποι εκκίνησης: λειτουργία δημιουργίας για αντιστοίχιση στόχων κατασκευής με ονόματα αρχείων (για παράδειγμα, το αρχείο "foo.o" ταιριάζει με το στόχο "%name.o") και λειτουργία άμεσης μεταγλώττισης:

    στόχος όλα = : σύνδεσμος

    σύνδεσμος στόχου =
    "target" : "foo.o", compile ("bar") { ... }

    στόχος μεταγλωττίζω (όνομα) =
    "%name.o" : "%name.c", "dep.h" { %CC %CFLAGS -c $^ -o $@ }

  • Οι τακτικές συναρμολόγησης καθορίζονται από ειδικούς κανόνες που μπορούν να χρησιμοποιηθούν για τον προσδιορισμό της ανάγκης επανασυναρμολόγησης ενός στόχου συναρμολόγησης. Εάν γίνει σύνδεση με την παρουσία ενός αρχείου, τότε αυτό προσδιορίζεται ρητά μέσω του αντίστοιχου πρόσημου (“target” για το όνομα κανόνα και *file (“target”) για τον έλεγχο του αρχείου).

    "target" : "foo.o", "bar.o" { ... }

    *file("target") : *file("foo.o"), *file("bar.o") { ... }

  • Ο προγραμματιστής μπορεί να ορίσει αυθαίρετα χαρακτηριστικά των τακτικών συναρμολόγησης. Η σημαία "*αρχείο" ορίζεται από προεπιλογή (@{...} υποδηλώνει καταστολή της εξόδου και η "έξοδος 99" σηματοδοτεί την ανάγκη για ανακατασκευή):

    τακτική *αρχείο (όνομα αρχείου) = @{
    test -f %όνομα αρχείου || έξοδος 99
    για f σε %

    Πηγή: opennet.ru

Προσθέστε ένα σχόλιο