Domanda

Supponiamo che io sono un po 'di C ++ file: A.cc, B.cc, C.cc, e le loro file di intestazione associati. A.cc fa uso di classi in B.cc e così via.

Ora dire voglio costruire i file di origine. Dopo la fase di pre-elaborazione, posso teoricamente la compilazione (non link) tutti i file contemporaneamente? (A.cc -> A.OBJ, ...)

Mi chiedo solo se v'è mai un momento in cui avrei dovuto aspettare fino a quando avrò finito di compilare A.cc prima di compilare B.cc.

È stato utile?

Soluzione

No, a meno che non si sta facendo qualcosa di strano in effetti, la compilazione di B.cc sarà non dipendono il risultato della compilazione A.cc (e viceversa). Ecco perché make -j (multipli in esecuzione "posti di lavoro", vale a dire, i processi, in parallelo, ogni compilazione di un file al tempo stesso ) è un uso popolare, soprattutto, naturalmente, su macchine multi-core (ma non quelli solo, dal momento che anche in assenza di più core di un piccolo numero di lavori simultanei possono nel finale end più veloce della stessa serie di posti di lavoro in modo arbitrario serializzato - uno può essere bloccato in attesa per il disco i / O mentre l'altro è sfornare una parte CPU-intensive della compilazione ...) ... fino a quando non avete abbastanza RAM disponibile fisica, che è; -).

Altri suggerimenti

Questo è ciò che le intestazioni sono per, giusto? rendere -j N farà questo per voi, anche se lo fa sulla base di fallibile Makefiles generati dagli utenti.

C'è un solo caso in cui si vuole realmente tale dipendenza: quando un file genera il codice C ++ che viene compilato in seguito. Make è sufficientemente flessibile per sostenere questo. Ma quando si pensa di vostri progetti regolari, no, non si vuole e non dovrebbe avere tali dipendenze.

Le estensioni sulla fine dei file sono più o meno priva di significato. Ciò che conta è che hai una definizione completa di tutte le classi si sta cercando di compilazione, anche se non sono ancora implementati. Poiché le estensioni .he .cc o cpp sono arbitrari, ciò che più conta è il contenuto dei file.

In generale, se si è in grado di descrivere completamente un oggetto della classe, allora non incorrere in problemi. Se la definizione di classe non esiste ancora nella catena che hai impostato (che può accadere con le intestazioni circolarmente-dipendente), allora hai avuto modo di fare un po 'di magia.

Il punto è che è davvero a te come designer / developer se si esegue in questo problema

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top