2012-10-30 15 views
17

Chciałbym utworzyć wieloplatformowy instalator dla systemu opartego na C++, który buduję.Jak utworzyć instalator z CMake + CPack + NSIS w systemie Windows?

Używam CMake do budowania wszystkiego i byłoby wspaniale, gdybym mógł użyć CPack do instalacji. Mam już CPack pracujący na OSX, ale nie mogę go uruchomić w systemie Windows. Aby to ułatwić, próbowałem uzyskać przykład pod adresem http://www.cmake.org/Wiki/CMake:Packaging_With_CPack, aby pracować z oprogramowaniem instalacyjnym NSIS. Nie mogę znaleźć instalatora NSIS w dowolnym miejscu po skonfigurowaniu (z generatorem VS 2010 Win64).

Może jestem zdezorientowany, ale pomyślałem, że będzie można stworzyć pakiet instalacyjny tylko ze źródłem, CMake, CPack i NSIS bez potrzeby Visual Studio. czy to możliwe?

Łącze do pełnego samouczka (ten pod adresem http://www.cmake.org/Wiki/CMake:Component_Install_With_CPack pomija odpowiednie informacje, aby uzyskać dział NSIS i nie wspomina o generatorach lub kompilatorach) byłby bardzo pomocny, lub podstawowe wyjaśnienie, w jaki sposób mogę uzyskać dostęp do tego mitycznego wygenerowany instalator NSIS byłby świetny.

Oto CMakeLists.txt dla powyższego przykładu:

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) 

Odpowiedz

26

... myślałem, że byłoby to możliwe, aby utworzyć pakiet instalacyjny z jedynego źródła, CMake, CPack i NSIS bez dowolny potrzeba Visual Studio. czy to możliwe?

Rodzaj. To zależy od tego, co masz na myśli przez "bez potrzeby Visual Studio". Potrzebujesz narzędzia do budowania, aby stworzyć bibliotekę i exe. W Windowsie potrzebujesz czegoś takiego jak msbuild Visual Studio, szczególnie jeśli podałeś "Visual Studio 10 Win64" jako generator.

Jeśli masz na myśli "bez uruchamiania Visual Studio", odpowiedź brzmi "tak". Możesz kazać CMake wykonać wybrane narzędzie do kompilacji za pomocą argumentu --build.

Po uruchomieniu CMake, otrzymasz plik PACKAGE.vcxproj w katalogu budowania. Buduje to, co stworzy instalator. Można też zbudować projekt paczkę od wewnątrz Visual Studio, czy można powołać msbuild bezpośrednio wykonując:

msbuild /P:Configuration=Release PACKAGE.vcxproj 

z katalogu kompilacji w wierszu polecenia VS.

Powinno to spowodować utworzenie instalatora o nazwie MyLib-1.0.0-win64.exe, również w katalogu budowania.


Jeśli chcesz po prostu użyć CMake, to alternatywą dla powołując msbuild jest:

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


Albo można zbudować rozwiązanie, potem wywołać CPack stworzyć instalator:

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

Idealny. Nie mogłem znaleźć żadnej spójnej dokumentacji dotyczącej tego, co należy zrobić, gdy dojdzie się do użycia VS. Naprawdę doceniam pomoc! – sklum

Powiązane problemy