CFLAGS

De la Wikipedia, enciclopedia liberă.
Salt la navigare Salt la căutare

CFLAGS și CXXFLAGS sunt numele variabilelor definite în makefiles sau ca variabile de mediu și destinate să conțină parametrii (steaguri) care reglementează comportamentul unui compilator C sau C ++ în procesul de producție al unui program software . Acești parametri sunt utilizați pentru a adapta programul la nevoile specifice ale unui sistem dat sau pentru a- l optimiza pentru a-și face funcționarea mai eficientă. În mod similar, puteți seta variabila CPPFLAGS care conține parametrii pentru preprocesor .

Pentru optimizare

În cazul în care aceste variabile sunt utilizate pentru a defini setările de optimizare, scopul lor este de a face programele produse mai eficiente. În cele ce urmează vă prezentăm câteva setări valabile pentru compilatorul gcc , implicit pe sistemele Linux .

Când vine vorba de o variabilă de mediu, este utilizată în mod implicit pentru a genera toate programele. Prin urmare, nu este recomandat să introduceți setări experimentale în această variabilă; prea multe optimizări pot provoca un comportament neașteptat al programelor rezultate (blocare sau, mai rău, defecțiune). În schimb, în ​​cazul unei variabile definite în makefile, este posibil să-și adapteze conținutul la nevoile specifice ale software-ului la care se referă makefile.

Posibilele opțiuni de optimizare sunt foarte numeroase, nu toate sunt enumerate. Având în vedere complexitatea limbajelor moderne, nu este posibil să se prezică efectele tuturor combinațiilor posibile de algoritmi, funcții ale sistemului, optimizări și cazuri de utilizare (date de intrare, calendarul lor, ...). Cu toate acestea, documentația completă poate fi găsită în Manualul GNU Online. Pe sistemele Linux, unde este instalată documentația în format Texinfo și cititorul relativ, pagina de documentare de pe gcc ( info gcc ) este disponibilă.

Marsul

Opțiunea -march specifică care ansamblor trebuie utilizat în timpul compilării, în funcție de arhitectura pe care intenționați să rulați programul. Doar una poate fi specificată. De exemplu:

  • pentru Athlon-Xp: -march = ornamon-xp
  • pentru AMD64: -march = k8
  • pentru Athlon: -march = Athlon
  • pentru EM64T: -march = nocona
  • pentru Pentium 4: -march = pentium4

Pentru alte opțiuni, pagina GNU pentru citirea marșului (EN) .

Parametrul O

O a doua setare este parametrul -O (sau majuscule, nu zero), care specifică clasa de optimizare a gcc. Clasele posibile sunt s (pentru optimizări de format), O (fără optimizări), 1, 2 sau 3 pentru optimizări de viteză multiplă (fiecare clasă are aceleași stegulețe ca și precedenta, plus câteva extra). Optimizările mai mari de 3 sunt permise, dar nu sunt recomandate, deoarece ar putea compromite stabilitatea programului.

-O0

-O0 instruiește compilatorul să nu efectueze nicio optimizare (opțiune implicită).

-O1

Cu -O1 sunt activate următoarele opțiuni de compilare:

  • -fdefer-pop
  • -fmerge-constante
  • -sărituri de fir
  • -floop-optimize
  • -fif-conversie
  • -fif-conversion2
  • -ramură întârziată
  • -probabilitate-ramură-probabilitate
  • -fcprop-registre

-O2

Indicarea -O2 activează aceste alte opțiuni de compilare (în plus față de cele din -O1):

  • -forță-mem
  • -foptimize-frați-apeluri
  • -fort-reducere
  • -fcse-follow-jumps
  • -fcse-skip-blocks
  • -frerun-cse-after-loop
  • -frerun-loop-opt
  • -fgcse
  • -fgcse-lm
  • -fgcse-sm
  • -fgcse-las
  • -fdelete-null-pointer-checks
  • -optimizări ieftine
  • -fregmove
  • -fschedule-insns
  • -fschedule-insns2
  • -fsched-interblock
  • -fsched-spec
  • -fcaller-salvează
  • -fpeephole2
  • -blocuri de comenzi
  • -funcții de comandă
  • -aliasing restricție
  • -funit-la-un-moment
  • -funcții-fals
  • -sărituri false
  • -fals-bucle
  • -etichete false
  • -sarcetare

-O3

Specificarea -O3 duce la activarea acestor optimizări suplimentare (în plus față de cele ale -O1 și -O2):

  • -finline-funcții
  • -fweb
  • -fame-registre

Potrivit unor utilizatori, -O3 poate produce cod mai lent. În special, registrele -fweb și -frename sunt contraproductive pentru arhitecturile x86 .

-Os

Activarea -O optimizează codul pentru a reduce dimensiunea finală a executabilului și include următoarele opțiuni:

  • -funcții-fals
  • -sărituri false
  • -fals-bucle
  • -etichete-fals
  • -blocuri de comenzi
  • -frefetch-loop-arrays

Alte optiuni

O altă opțiune populară de optimizare este -pipe , care implică utilizarea conductelor în loc de fișiere temporare , pentru comunicarea între diferitele procese de construire. Face compilarea mai rapidă, folosind RAM în loc de hard disk , necesitând mai multă memorie liberă.

De exemplu, utilizarea de -fomit-frame-pointer , care exclude inițializarea indicatorului la cadru pentru funcții care pot face fără el; poate avea repercusiuni grave dacă trebuie să depanați aplicația.

Atunci când definiți CFLAGS și CXXFLAGS pentru a genera cod optimizat semnificativ, de obicei sunt activate mai multe opțiuni de optimizare, ca în exemplul următor:

-march = atleton-xp -m3dnow -msse -mfpmath = sse -mmmx -O3 -pipe -fforce-addr -fomit-frame-pointer -funroll-loops -frerun-cse-after-loop -frerun-loop-opt -falign -funcții = 4 -maccumulate-outgoing-args -ffast-math -fprefetch-loop-arrays

linkuri externe