2016-05-11 24 views
10

Sto provando a creare un progetto Open Source C++. Voglio che sia il più facile da costruire possibile, ma allo stesso tempo multipiattaforma. Non ho bisogno di gui o librerie pesanti come boost o Qt, quindi ho deciso di usare GitHub, CMake e LibSourcey. Il mio problema è che non riesco a trovare un modo per rendere il mio progetto facile da costruire in Windows, che è il mio ambiente di sviluppo. Come posso "fare installare" una libreria in Windows da usare nel mio progetto? Devo anche installarlo in Windows? È possibile scaricare, compilare e collegare automaticamente?CMake "make install" o includendo una libreria in windows

Su Windows, oltre a un programma di installazione, voglio anche creare una versione portatile, quindi non voglio percorsi di libreria codificati.

Presumo, su alcune piattaforme, come Linux, le librerie sono costruite separatamente e impacchettate dai manutentori. Quindi non dovrei solo impacchettare le mie copie.

Quindi, la mia domanda è: Come posso impostare un progetto che è multipiattaforma e facile da costruire, e quali sono le migliori pratiche?

+0

Non sono sicuro se stai parlando di trovare una soluzione per il tuo processo di sviluppo o per realizzare rilasci o entrambi? [msys2] (https://sourceforge.net/projects/msys2/) può essere utilizzato in Windows per gestire i pacchetti richiesti. –

+0

Ultimamente ho riscontrato lo stesso problema, msys2 sembra ottimo, ma preferisco usare la toolchain nativa per lo sviluppo di Windows. –

+0

Ho esaminato msys, ma voglio che sia nativo. Con msys è ancora più difficile compilare x64 e con il corretto supporto Unicode. – denisps

risposta

1

È possibile creare git submodule nel vostro repo git con il percorso per esempio contrib/LibSourcery e url GitHub repo di LibSourcery, a causa di LibSourcery utilizza cmake basta necessario aggiungere tale linea nel vostro CMakeLists.txt: add_subdirectory(contrib/LibSourcery)

Così persona che vuoi usare il tuo codice, solo per ottenere tutto il tuo codice e le dipendenze, dopo che viene eseguito cmake -G, per creare il progetto per IDE di sua scelta (incluso MSVC++ ovviamente), progetto aperto in IDE e premi il pulsante di creazione, tutto qui.

+0

Non sembra funzionare. Non so se sto facendo qualcosa di sbagliato o LibSourcery non supporta questo tipo di inclusione. L'ho incluso nella cartella contrib come submodule, ma non sono ancora sicuro se questo è il modo giusto per includere una libreria su piattaforme Unix. Collegherebbe alla libreria installata se è disponibile? Come si aggiunge include? – denisps

+0

@denisps CMake anche il supporto di progetti esterni in modo tale https://cmake.org/cmake/help/v3.0/module/ExternalProject.html – fghj

+0

Questa risposta sembra essere la più vicina. Sfortunatamente, LibSourcery sembra essere rotto e potenzialmente abbandonato. Ti sarei grato se ti spiegassi come prendere in considerazione il caso quando sto collegando la libreria su cui è già installato, ad esempio Linux. – denisps

1

Utilizzare babun. È un wrapper per cygwin e funziona perfettamente per tutto ciò di cui ho bisogno, anche compilando cmake.

In alternativa, è possibile utilizzare premake, che utilizza lua come sistema di configurazione e funziona correttamente su Windows.

0

Non esiste un modo elegante multipiattaforma, poiché l'idea di "make install" non esiste su Windows, quindi l'utilizzo di cmake install non è definito lì. Per qualcosa che dovrebbe aiutare il cross-platform, ritengo che questa sia una carenza.

La mia soluzione è quella di scrivere un _install personalizzato che prende gli stessi argomenti come installare CMake e poi su Linux chiama semplicemente installare, e su Windows lo fa un add_command che fa una copia di post-generazione per i percorsi di installazione, che compie la stessa cosa. Fondamentalmente, _INSTALL si comporta come ci si aspetta che si comporti un comando di installazione multipiattaforma. Posso condividere la mia funzione _INSTALL se c'è interesse.

_INSTALL è posizionato su un Helper.cmake e incluso in tutti i miei CMakeList.txt per i miei progetti, quindi tutto ciò che devo fare è chiamarlo ei file lib/inc generati appaiono magicamente sia per win che per linux.

Problemi correlati