Crearea fișierelor

Makefile este depozitul de informații care specifică programul de realizare, cum se recompila proiectul.

Ce fac din Makefiles

O regulă explicită descrie momentul și modul de actualizare a fișierelor, numite obiective de reguli. Această regulă afișează fișierele pe care depinde scopul regulii (așa-numitele condiții prealabile) și pot fi specificate și comenzile pe care le puteți utiliza pentru a crea sau actualiza ținta.







O regulă implicită descrie momentul și modul de actualizare a unui grup de fișiere ale căror nume corespund unui anumit șablon. Această regulă descrie modul în care o țintă poate depinde de un fișier cu un nume "similar" și specifică comenzi pentru actualizarea țintelor.

O definiție variabilă este un șir al unui makefile, în care o variabilă este atribuită unei anumite valori de text. Mai mult, această valoare poate fi "substituită" în locul potrivit al textului. În exemplul makefile, variabila obiectelor a fost definită ca o listă de fișiere de programe obiect.

Directiva direcționează programul de realizare a unei acțiuni speciale în timp ce citiți fișierul make. În special, sunt posibile următoarele acțiuni:

Citirea unui alt fișier.

O soluție (bazată pe valoarea variabilelor) despre folosirea sau ignorarea unei părți a fileului make.

Definiția unei variabile multiline formată din mai multe linii.

În mod implicit, atunci când operațiile de prelucrare caută Makefile, încearcă să găsească alternative fișiere cu următoarele nume (în această ordine): `GNUmakefile„ `Makefile“ si `Makefile“.

În cazul în care marca nu poate găsi fișiere cu numele enumerate mai sus, încearcă să continue să lucreze fără a utiliza fișierul makefile. În acest caz, atunci când apelați marcați, trebuie să specificați explicit țintă principală, iar utilitarul va încerca să atingă acest obiectiv folosind doar regulile "implicite" încorporate în acesta.

Dacă doriți să utilizați un nume "nonstandard" pentru makefile, îl puteți specifica pe linia de comandă folosind opțiunile `-f 'sau' -file '. Argumentele "-f nume fișier" sau "--file = nume fișier" dau posibilitatea de a utiliza un fișier numit nume de fișier ca un makefile. Puteți specifica simultan procesarea mai multor fișiere de marcă, listându-le pe linia de comandă cu ajutorul mai multor opțiuni `-f 'sau' -file '. Toate fișierele de marcă specificate în acest mod sunt logic "combinate" în ordinea în care au fost specificate pe linia de comandă. În prezența opțiunea de linie de comandă `-f„or` --file“, caută în mod automat pentru make-fișiere cu numele` GNUmakefile „` Makefile“si` Makefile“, nu a făcut.

Regulile sunt conținute în makefile și descriu când și cum trebuie actualizate sau create anumite fișiere, numite ținte. Cel mai adesea, fiecare regulă conține un singur scop. Regulile listează fișierele care sunt condiții prealabile în acest scop și comenzile care trebuie executate pentru a crea sau actualiza ținta.







Ordinea regulilor din makefile nu contează. Singura excepție este alegerea obiectivului implicit, obiectivul pe care face să îl atingă, cu excepția cazului în care l-ați setat în mod explicit. În mod implicit, obiectivul principal este de a obține obiectivul de la prima regulă din primul fișier de procesare care urmează să fie procesat. Dacă această regulă conține mai multe scopuri, atunci numai primul dintre ele devine obiectivul principal. Există două excepții. În primul rând, obiectivele principale alese în mod prestabilit nu pot fi obiective ale căror nume încep cu o perioadă (cu excepția cazului în care conțin cel puțin un caracter "/"). În al doilea rând, din procesul de selectare a obiectivului principal, regulile șablonului sunt excluse.

De aceea, scriem, de obicei, makefile astfel încât prima regulă să descrie procesul de construire a programului finit sau toate programele descrise în acest makefile (adesea cu un gol numit `all ').

În general, regulile arată astfel:

goluri. Cerințe preliminare; echipă

Obiectivele sunt nume de fișiere separate prin spații. Simbolurile de șablon pot fi utilizate în numele țintelor. Pentru fișierele conținute în arhivă, se poate folosi un formular special de înregistrare: 'a (m)', unde a este numele fișierului de arhivă și m este numele fișierului conținut în el. De regulă, regula conține doar un singur scop, dar uneori este logic să specificați mai multe obiective într-o singură regulă.

Linile care conțin comenzi trebuie să înceapă cu un caracter tab. Prima comandă poate fi localizată fie în linie cu cerințele prealabile (și separate de acestea printr-o punct și virgulă), fie în linia următoare după cerințele preliminare (această linie trebuie să înceapă cu un caracter tab). În ambele cazuri, rezultatul va fi același.

Deoarece semnul dolarului este folosit pentru a face referire la variabile, pentru a le folosi în reguli, trebuie să scrieți '$$'. Liniile lungi ale fișierului makefile pot fi împărțite în părți utilizând caracterul '' la sfârșitul liniei. Acest lucru poate îmbunătăți citirea fișierului makefile, dar nu există nici o nevoie "tehnică" pentru el - make nu limitează în nici un fel lungimea șirurilor makefile.

Regula conține informații despre două lucruri: când trebuie să se considere că obiectivul este "depășit" și cum poate fi actualizat atunci când apare o astfel de nevoie.

Criteriul de "obsolescență" se calculează în funcție de cerințele prealabile, care sunt numele fișierelor separate prin spații. Caracterele de șablon pot fi folosite în numele prealabile. Cerințele preliminare pot fi, de asemenea, fișiere care se află în arhive. Scopul este considerat „învechit“, în cazul în care fișierul nu există, sau este „mai vechi“ decât oricare dintre condițiile prealabile (a verifica cele mai recente timpii de modificare fișier). Ideea este că, deoarece fișierul țintă se bazează pe informații din fișierele prealabile, modificarea a cel puțin una dintre ele poate determina ca conținutul fișierului țintă să nu mai fie "corect".

Comenzile indică modul de actualizare a țintei. Acestea sunt doar șiruri de caractere (cu unele caracteristici suplimentare) care sunt executate de interpretorul de linie de comandă (de obicei, `sh ').

Utilizați caractere cu machete în numele fișierelor.

Folosind caractere de tip wildcard, puteți specifica un întreg grup de fișiere utilizând un singur nume. În marcă, caracterele sunt "*", "?" și "[. ] "(ca în shell-ul Bourne). De exemplu, modelul "* .c" se va potrivi cu toate fișierele cu sufixul ".c" din directorul curent.

"la începutul numelui fișierului are și un înțeles special. Caracterul unic `

/ 'înseamnă directorul de acasă. De exemplu, expresia `

/ bin "va însemna` / home / you / bin '. Dacă imediat după `

'urmat de un nume, un astfel de șir ar fi directorul de domiciliu al utilizatorului cu acel nume. De exemplu, șirul `

john / bin "va însemna` / home / john / bin '. În sistemele în care utilizatorii nu au directorul de domiciliu (cum ar fi MS-DOS sau MS-Windows), acest comportament poate fi emulat prin setarea variabilei de mediu HOME.

Metacaractere de prezentare a informațiilor (înlocuirea acestora cu o listă concretă de fișiere care se potrivesc cu modelul) este produs în mod automat în numele obiectivelor de nume condițiile indispensabile și echipe (în echipe angajate în această linie de comandă interpretor). În alte cazuri, șablonul este extins doar dacă cererea este explicită utilizând funcția wildcard.

O valoare specială pentru caracterele "wildcard" poate fi "dezactivată" cu caracterul precedent "\". Astfel, șirul `foo \ * bar 'se va referi la un nume destul de ciudat, format din șapte caractere - foo-ul inițial, un asterisc și un" bar ".







Articole similare

Trimiteți-le prietenilor: