2012-10-30 17 views
17

Mi piacerebbe creare un programma di installazione multipiattaforma per un sistema basato su C++ che sto costruendo.Come creare un programma di installazione con CMake + CPack + NSIS su Windows?

Io uso CMake per costruire tutto, e sarebbe bello se potessi usare CPack per fare l'installatore. Ho già CPack che funziona su OSX, ma non riesco a farlo funzionare su Windows. Per semplificare le cose, ho cercato di ottenere l'esempio su http://www.cmake.org/Wiki/CMake:Packaging_With_CPack per funzionare con il software di installazione NSIS. Non riesco a trovare l'installer NSIS da nessuna parte dopo la configurazione (con VS 2010 Win64 generator).

Forse sono confuso, ma ho pensato che sarebbe stato possibile creare il pacchetto di installazione con solo l'origine, CMake, CPack e NSIS senza alcun bisogno di Visual Studio. È possibile?

Un collegamento a un tutorial completo (quello su http://www.cmake.org/Wiki/CMake:Component_Install_With_CPack ignora le informazioni pertinenti per far funzionare NSIS e non fa menzione di generatori o compilatori) sarebbe molto utile, o una spiegazione di base su come posso arrivare a questo mitico l'installer NSIS generato sarebbe fantastico.

Ecco CMakeLists.txt per l'esempio precedente:

cmake_minimum_required(VERSION 2.6.0 FATAL_ERROR) 
project(StPMS) 

add_library(mylib mylib.cpp) 

add_executable(mylibapp mylibapp.cpp) 
target_link_libraries(mylibapp mylib) 

install(TARGETS mylib 
    ARCHIVE 
    DESTINATION lib 
    COMPONENT libraries) 
install(TARGETS mylibapp 
    RUNTIME 
    DESTINATION bin 
    COMPONENT applications) 
install(FILES mylib.h 
    DESTINATION include 
    COMPONENT headers) 

set(CPACK_GENERATOR NSIS) 
set(CPACK_PACKAGE_NAME "MyLib") 
set(CPACK_PACKAGE_VENDOR "CMake.org") 
set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "MyLib - CPack Component Installation Example") 
set(CPACK_PACKAGE_VERSION "1.0.0") 
set(CPACK_PACKAGE_VERSION_MAJOR "1") 
set(CPACK_PACKAGE_VERSION_MINOR "0") 
set(CPACK_PACKAGE_VERSION_PATCH "0") 
set(CPACK_PACKAGE_INSTALL_DIRECTORY "CPack Component Example") 
SET(CPACK_NSIS_MODIFY_PATH ON) 

INCLUDE(CPack) 

risposta

26

... ho pensato che sarebbe stato possibile creare il pacchetto di installazione con la sola fonte, CMake, CPack, e senza alcuna NSIS bisogno di Visual Studio. È possibile?

Tipo di. Dipende da cosa intendi con "senza bisogno di Visual Studio". È necessario uno strumento di compilazione per creare effettivamente lib e exe. Su Windows, hai bisogno di qualcosa come il msbuild di Visual Studio, specialmente se hai specificato "Visual Studio 10 Win64" come generatore.

Se si intende "senza eseguire Visual Studio", la risposta è sì. È possibile fare in modo che CMake esegua lo strumento di creazione scelto utilizzando l'argomento --build.

Dopo aver eseguito CMake, si finisce con un file PACKAGE.vcxproj nella directory di costruzione. Sta costruendo questo che creerà l'installer. È possibile costruire il progetto PACCHETTO dall'interno di Visual Studio, o è possibile richiamare direttamente msbuild facendo:

msbuild /P:Configuration=Release PACKAGE.vcxproj 

dalla directory di compilazione in un prompt dei comandi VS.

Questo dovrebbe fornire l'installatore denominato MyLib-1.0.0-win64.exe, anche nella directory di build.


Se si desidera utilizzare solo CMake, poi in alternativa al invocare msbuild è:

cmake --build . --target PACKAGE.vcxproj --config Release 


Oppure si può costruire la soluzione di prima, quindi richiamare CPack per creare il programma di installazione:

cmake --build . --config Release 
cpack -C Release 
+2

Perfetto. Non sono riuscito a trovare alcuna documentazione coerente su cosa fare quando si arriva al punto di usare VS. Apprezzo molto l'aiuto! – sklum