2009-09-22 18 views
26

Ho due progetti, entrambi utilizzano CMake. Ora voglio includere uno dei progetti come una libreria all'interno dell'altro, pur mantenendo la possibilità di compilarli come progetti autonomi.Incorporare un progetto cmake all'interno di un altro?

Quello che ho fatto finora è: usare il sistema di controllo della versione per clonare una copia del progetto figlio in una sottodirectory del progetto genitore. Ho usato "add_subdirectory" per includere CMakeLists.txt del progetto figlio nel progetto padre. E ho corretto le collisioni di nomi tra i target rinominando alcuni target nel progetto figlio.

Tuttavia, un problema che sto incontrando è che i vari test di configurazione nel progetto figlio non sembrano essere in esecuzione. Ad esempio, il progetto figlio utilizza il modulo FindThreads per determinare quali primitive di sincronizzazione sono disponibili. Il progetto padre non è al corrente dei problemi di threading e pertanto non ha alcun test relativo a questo. Analogamente, il progetto figlio presenta vari test per le intestazioni e tali che non sono necessari al progetto principale. Nessuno di questi test sembra essere in esecuzione e i simboli definiti da questi test non vengono aggiunti al file CMakeCache.txt.

Non voglio davvero dover caricare tutti i test del progetto figlio (che si occupano principalmente di problemi specifici della piattaforma che non sono rilevanti per il genitore) nel CMakeLists.txt del progetto principale.

risposta

17

CMake 2.8 ha aggiunto un nuovo modulo External Project, che consente di creare un target personalizzato per gestire la generazione di un altro progetto CMake. La documentazione su questo è un po 'debole, ma sembra che potrebbe fare quello che vuoi.

Penso che l'idea sarebbe quella di chiamare ExternalProject_Add dal tuo progetto padre, puntandolo alla directory sorgente del progetto figlio (puoi anche farlo controllare il progetto figlio da SVN o CVS per te, bello!).

+1

Grazie, ho lavorato recentemente con progetti esterni e fanno ciò che voglio. Dato che sto usando i sottoprogetti git, devo dire a ExternalProject_Add di non scaricare o installare il progetto esterno - questo può essere fatto impostando i comandi di download e installazione su "" (stringa vuota). – Talin

Problemi correlati