Rychly prekladac C++ pro Linux?

Miroslav Prymek xprymek na fi.muni.cz
Středa Červen 18 12:21:55 CEST 2003


>   Zeptam se uplne jinak ... Ja vytvarite Makefile pro Vasi aplikaci?
> Rucne? Muzeme ho videt?

Ted nesedim u stroje ze ktereho bych to mohl poslat, ale jde o klasicky
Makefile, vytvareny rucne. Pochopitelne je to udelano tak, aby se 
opravdu prekladaly jenom ty soubory, ktere se zmenily. V tom by chyba
byt nemela (navic zminene wxWindows preklad resi pomoci vlastnich 
Makefiles - predate jim jenom nazvy pro .o soubory a chteny nazev 
binarky v "makefilovske" promenne).

>   Nevim co presne myslite tim inkrementalnim prekladem, 

ILINK z BC++ (incrementation linker). Predpokladam, ze inkrementacni
znamena, ze nejak lip pracuje s tim, co se zmenilo nebo nezmenilo a
premysli, co je nutne prekladat, atd. ALE JEDNA SE O LINKER, NE SAMOTNY
PREKLADAC, TAKZE TO JE ASI TROCHU MIMO MISU, SORRY.

>ale u GCC se to
> dela tak, ze na zacatku prelozi vse (stejne jako pisete, ze u C++
> Builderu byl prvni preklad trochu delsi) a pote preklada uz jenom to, co
> se zmenilo (nebo je ovlivneno danou zmenou).

IMHO to nema na starosti gcc ale make. gcc co dostane,to KOMPLETNE prelozi.

>   Za dalsi zalezi na tom, co vsechno z C++ pouzivate, protoze includnuti
> nejakych header filu muze znamenat includnuti stovek kB ...

S tim je problem, neznam zadny univerzalni postup, jak dobre rozhodnout,
jak konstruovat hlavicky. Muj postup je takovy, ze (temer) kazda
trida ma svoje soubory .cpp/.h. Problem je v tom, ze v nekterych tridach
z duvodu optimalizace potrebuji pouzivat inline, takze je potreba vlozit
i hlavicky vsech trid, ktere jsou v tele inlinu pouzity.

NAPR.

/* file obsluzna.h */
#include <object.h> // tohle bohuzel prodlouzi hlavicku

class cObsluzna
{
public:
  inline /*zbytecne - inline je tady implicitne*/ void Metoda()
  {
   Objekt->Metoda();
   // **** tady je problem, potrebuju hlavicku pro cObjekt
   // **** Pokud by nebylo inline - zbytecna rezie se dvema volanimi v
   // **** podstate jedne Metody()
   }
  private:
  cObjekt * Objekt;
  }
//----------------------------------CUT ------------
/* file object.h */
class cObject
{
public: void Metoda();
}

IMHO je takovych konstrukci u rozsahlych knihoven (napr. zminene
wxWindows) spousta. Tady by mela silne pomoct prekompilace hlavicek,
ale z praxe se mi to nezda (#pragma interface moc neurychluje).

Je pravda,ze posledni dobou pouzivam vic vysokourovnove zalezitosti
jako streamy, vyjimky, atd. jejichz (standardni) hlavicky urcite nejsou
nejkratsi, ale spis bych rekl, ze ty hlavicky jsou nejak uz 
predprelozene, prece gcc nebude porad dokola preklad standardni knihovnu 
(resp. jeji hlavicky)? Nebo se mylim?

> 
>   Jinych prekladacu existuje mnoho, ale jsou komercni. Neco dela
> Metrowerks, Green Hills, ...
>
:( To se me asi netyka, za zrychleni prekladu oproti gcc bych asi 
neplatil :).





Další informace o konferenci Linux