5.compilare c-make.txt

Download 5.compilare C-make.txt

If you can't read please download the document

Upload: madalina-oprea

Post on 18-Sep-2015

215 views

Category:

Documents


2 download

TRANSCRIPT

5.Compilarea programelor C; i utilizarea make sub Unix*Forma generala a comenzii de compilare este:gcc -o nume | -c -g -l surseC si eventual module rezultate din alte compilari*In forma simpla compilarea se face: gcc sursa.cRezulta fisierul executabil a.out care se poate lansa: ./a.out argumente*Principalele optiuni gcc sunt:-o nume -> compileaza si editeaza legaturi si genereaza un fisier executabil nume-c -> compileaza sursa nume.c dar nu face editarea de legaturi. Rezultatul este fisierul obiect nume.o-lNumeBiblioteca -> cauta in bibliotecile standard Unix biblioteca NumeBiblioteca si extragedin ea modulele care sunt necesare in program.-g produce extracod pentru depanarea programului in timpul executiei*Fisierul Makefiles si comanda make-> utilitar care permite dezvoltarea comoda a unor programe, fie ele cat de complicate. Pentru a intelege cum functioneaza acest utilitar sa plecam de la un exemplu:Sa presupunem ca dorim sa obtinem un fisier executabil prog, la a caruiimplementare sunt necesare trei texte sursa C: part1.c, part2.c, main.csi un fisier header antet.h. Sa presupunem ca fisierul antet.h este necesarnumai pentru compilarea fisierelor part1.c si part2.c, evident acestea avandla inceputul lor cate o linie # include "antet.h"In modul cel mai simplu, dar compiland de fiecare data totul, putem procedain unul din urmatoarele doua moduri:1. O singura compilare: gcc -o prog part1.c part2.c main.c2. Patru compilari succesive:gcc -c part1.cgcc -c part2.cgcc -c main.cgcc -o prog part1.o part2.o main.oIn continuare dorim ca de fiecare data cand facem modificari in surseleacestui proiect, sa recompilam doar sursele strict necesare, sa nurecompilam toate sursele de fiecare data. Utilitarul make de sub Unix are ca scop tocmai determinarea automata apartilor care trebuie recompilate. Pentru aceasta, este suficient cautilizatorul sa descrie, intr-un fisier Makefile, reguli de definire apartilor compilabile / prelucrabile independent, resursele de care depindsi dependentele dintre acestea. O regula este de forma:target: dependente (de regula nume de fisiere sau alte targeturi)comanda1comanda2- - - - - - -comandantarget este un nume, care de cele mai multe ori este numele fisierului creat de catre regula. Liniile urmatoare contin comenzile de realizare a targetului. Obligatoriu acestea incep cu un . In comenzile de dupa linia de definire a targetului apar, de regula, fisierele / targeturile din dependente. O comanda se executa numai daca momentul de creare al targetului este mai vechi decat momentele de creare a dependintelor.Intre doua reguli trebuie sa apara o linie goala.Iata, pentru problema de mai sus, un fisier Makefile:compile: part1.o part2.o main.ogcc o prog part1.o part2.o main.opart1.o: part1.c antet.hgcc c part1.cpart2.o: part2.c antet.hgcc c part2.cmain.o: main.cgcc c main.ccurat:rm *.orm progIn forma cea mai simpla lansarea se face: makeAutomat se incearca rezolvarea primei reguli. Pentru aceasta se verificamai intai daca dependentele sunt actuale sau daca unele dintre ele trebuierecreate. Pentru cele care trebuie recreate se evalueaza pe rand regulileacestora s.a.m.d.In cazul nostru regula de baza este targetul compile care creeazaexecutabilul prog. Cele trei dependente ale lui sunt cele trei fisiereobiect, pentru care s-au specificat reguli proprii.Regula curat nu face parte din construirea fisierului executabil prog.Ea poate fi apelata separat pentru stergerea, daca se doreste, a fisierelorobiect si executabil create. Lansarea este: make curat