Principiul de funcționare a anteturilor precompilate, mediul de dezvoltare, vizuale c, articole despre

Pentru a controla directivele precompilate, se folosește directiva compilatorului #pragma hdrstop. Toate fișierele de antet incluse înaintea acestei directive sunt plasate într-o singură imagine, de exemplu:







Această secvență creează o imagine care conține vcl.h și șirul compilat. Această imagine va fi utilizată pentru un alt fișier cpp dacă aceleași fișiere sunt incluse în directiva hdrstop în aceeași ordine. Voi observa că nu numai compoziția, dar și ordinea anteturilor sunt importante - chiar dacă următorul fișier cpp include aceleași anteturi, dar mai întâi șir specificat și apoi vcl.h, atunci va fi creată o nouă imagine pentru acest fișier cpp.

Astfel, pentru a reutiliza antetul precompilat, trebuie îndeplinite două condiții:
  • compoziția fișierelor incluse înaintea directivei hdrstop trebuie să fie aceeași
  • Secvența de includere a fișierelor înaintea directivei hdrstop trebuie să fie aceeași
Reducerea costului de compilare a anteturilor standard la minim este posibilă numai dacă compilați o imagine care conține toate anteturile standard necesare pentru proiect. Acest lucru necesită:
  • Toate fișierele cpp ale proiectului au avut același bloc de incluziuni înainte de directiva hdrstop
  • Acest bloc ar trebui să includă TOATE fișierele header standard necesare pentru proiect

Este foarte simplu să executați aceste condiții, pentru aceasta, la începutul fiecărui fișier cpp trebuie să introduceți următoarele rânduri:

unde pch.h este fișierul care conține toate anteturile standard:

Textul integral al versiunii mele de acest fișier este dat la sfârșitul articolului. Fișierele h incluse în imaginea precompilată sunt constrânse - nu ar trebui să fie date inițializate în ele, de exemplu, în math.hpp există linii:

Din cauza acestor constante, nu puteți include math.hpp în fișierul pch.h.

Apropo, C ++ Builder implementează strategia de control descrisă a anteturilor precompilate atunci când adaugă noi module la proiect. De exemplu, atunci când creați o nouă aplicație, Unit1.cpp va fi după cum urmează:

Dacă te uiți la textul vcl.h, poți vedea că acesta este shell-ul pentru includerea unui număr mare de alte fișiere standard de antet.







Puteți controla compoziția anteturilor incluse în vcl.h cu caractere speciale (INC_VCLDB_HEADERS, INC_VCLEXT_HEADERS, etc.). În versiunea mea de pch.h, aceste caractere sunt definite folosind #define înainte ca vcl.h să fie activată, ceea ce duce la o creștere a numărului de fișiere incluse.

Ca și în proiectul existent, procedați la utilizarea anteturilor precompilate

Chiar și într-un proiect mare, este ușor să vă deplasați la utilizarea antetelor precompilate.

În proprietățile proiectului trebuie să activați cache-ul anteturilor precompilate și este recomandat să specificați un fișier "personal" în care vor fi stocate antetele precompilate: Project - Options - fila Compiler, grup "Pre-compiled headers". Aici ar trebui să selectați "Anteturi precompilate cache", iar în câmpul "Nume fișier" introduceți "pch.csm". Cu această setare, imaginea antecedentelor precompilabile se va afla în dosarul proiectului din fișierul pch.csm.

După aceea, la începutul fiecărui modul cpp, trebuie să introduceți 2 linii:

Toate fișierele antetului anterior incluse rămân în locurile lor, nu este necesar să le ștergeți. De exemplu:

Întrucât, în toate rubricile standard, se folosesc tutorii de reînscriere, re-menționarea lor nu implică reîncadrarea.

În principiu, atunci când se utilizează pch.h, necesitatea tehnică de a include anteturile standard dispare. Cu toate acestea, este util să specificați toate anteturile necesare pentru fiecare modul particular de mai jos directiva #pragma hdrstop. În primul rând, documentează într-o oarecare măsură modulul - pe fișierele incluse puteți evalua ce funcții utilizează acest modul. În al doilea rând, facilitează reutilizarea modulului în alte proiecte, în care nu se utilizează fie pch.h, fie conținutul său poate fi diferit.

Teoretic, puteți îmbunătăți în continuare eficiența compilării prin includerea în pch.h nu numai standard, ci și toate fișierele antet personalizate. În practică, deoarece anteturile utilizatorilor se schimbă destul de frecvent, aceasta poate duce la recompilarea frecventă a pch.h, ceea ce va afecta negativ timpul de compilare. În plus, anteturile personalizate nu sunt de obicei foarte mari și sunt compilate foarte rapid. Prin urmare, includerea lor pch.h nu este recomandată.

Cum se verifică dacă anteturile precompilate sunt utilizate în mod eficient

Când adăugați fișiere noi în proiect, nu uitați să includeți pch.h în acestea, altfel imaginea precompilată obișnuită nu va fi folosită pentru ele. Aceeași situație poate apărea dacă anteturile standard sunt incluse în unele module care nu sunt incluse în pch.h. Pentru a urmări astfel de fișiere, există mai multe moduri:
  • vizualizarea procesului de compilare. De obicei, numărul de linii compilate într-un fișier nu trebuie să depășească 10.000-15.000 de rânduri
  • dacă este selectat un fișier individual pentru ca proiectul să stocheze imaginea antecedentelor precompilate și acest fișier se numește pch.csm, atunci ar trebui să acordați atenție prezenței fișierelor auxiliare cu numele pch. # 00, pch. # 01, etc. Dacă aceeași imagine precompilată este folosită pentru toate fișierele de proiect, atunci fișierul auxiliar trebuie să fie doar unul - pch. Dacă există mai multe astfel de fișiere, înseamnă că sunt create imagini suplimentare pentru unele module cpp.






Articole similare

Trimiteți-le prietenilor: