Sto lavorando alla configurazione dell'ambiente di compilazione per un progetto C ++ che utilizza più librerie. Queste librerie sono indipendenti l'una dall'altra, ma dipendono tutte dalla stessa libreria di terze parti (GTest) per i test. Sto avendo qualche problema nel determinare dove dovrei mettere questa libreria di terze parti, quindi avrò la massima flessibilità e modularità nel mio progetto.
La struttura generale del progetto è la seguente:
+---------------+
| Main Project |
+-+-----+-----+-+
| | |
+----+ | +----+
| | |
+---v---+ +---v---+ +---v---+
| lib1 | | lib2 | | lib3 |
+---+---+ +---+---+ +---+---+
| | |
+----+ | +----+
| | |
+-v-----v-----v-+
| GTest |
+---------------+
Per come la vedo io ho 3 opzioni:
Costruisci e installa GTest da qualche parte sul mio sistema e fai in modo che tutte e 3 le librerie si colleghino alla stessa libreria GTest.
-
Il vantaggio di questo è che ho solo una copia di GTest, e le librerie non hanno bisogno di sapere nulla l'una sull'altra o sul progetto principale.
-
Lo svantaggio è che non esiste un posto standard dove metterlo e chiunque altro voglia utilizzare una di queste librerie dovrà sapere come installare GTest da sé e dove è necessario installarlo.
Aggiungi GTest come dipendenza dal progetto Main (magari in una cartella "3rdparty") e collega tutte le librerie alla copia del progetto principale di GTest
-
Il vantaggio di questo è che ho solo una copia di GTest e non è installata in qualche posizione arbitraria
-
Lo svantaggio ora è che tutte le librerie devono sapere del progetto principale e non potrebbero essere utilizzate senza il presente progetto principale. (e preferirei che fossero completamente indipendenti e utilizzabili da soli)
Aggiungi GTest come dipendenza su ogni singola libreria (ogni libreria avrà una cartella "3rdparty" che contiene GTest)
-
Il vantaggio di questo è che ogni libreria è indipendente dalle altre e tutte contengono la loro dipendenza GTest in modo che gli utenti della libreria non abbiano bisogno di sapere come installarlo da soli.
-
Lo svantaggio è che ora avrei 3 copie separate di GTest, una per ogni libreria. Ciò aggiunge anche una certa complessità complessiva.
Quale di questi approcci è il più preferibile, se esiste? Ci sono altri approcci migliori che non ho ancora considerato?