web-dev-qa-db-fra.com

Comment créer un programme d'installation avec CMake + CPack + NSIS sous Windows?

Je voudrais créer un programme d'installation multiplateforme pour un système basé sur C++ que je construis.

J'utilise CMake pour tout construire, et ce serait génial si je pouvais utiliser CPack pour faire l'installateur. J'ai déjà CPack fonctionnant sur OSX, mais je ne peux pas le faire fonctionner sur Windows. Pour rendre les choses plus faciles, j'ai essayé d'obtenir l'exemple sur http://www.cmake.org/Wiki/CMake:Packaging_With_CPack pour travailler avec le logiciel d'installation NSIS. Je ne trouve plus le programme d'installation NSIS après la configuration (avec le générateur VS 2010 Win64).

Je suis peut-être confus, mais je pensais qu'il serait possible de créer le package d'installation avec uniquement la source, CMake, CPack et NSIS sans avoir besoin de Visual Studio. Est-ce possible?

Un lien vers un tutoriel complet (celui de http://www.cmake.org/Wiki/CMake:Component_Install_With_CPack saute les informations pertinentes pour faire fonctionner NSIS et ne mentionne pas les générateurs ou les compilateurs) serait très utile, ou une explication de base sur la façon dont je peux accéder à ce mythique programme d'installation NSIS serait formidable.

Voici CMakeLists.txt pour l'exemple ci-dessus:

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)
25
sklum

... Je pensais qu'il serait possible de créer le package d'installation avec uniquement la source, CMake, CPack et NSIS sans avoir besoin de Visual Studio. Est-ce possible?

En quelque sorte. Cela dépend de ce que vous entendez par "sans avoir besoin de Visual Studio". Vous avez besoin d'un outil de construction pour réellement créer la lib et l'exe. Sous Windows, vous avez besoin de quelque chose comme msbuild de Visual Studio, surtout si vous avez spécifié "Visual Studio 10 Win64" comme générateur.

Si vous voulez dire "sans exécuter Visual Studio", la réponse est oui. Vous pouvez demander à CMake d'exécuter l'outil de construction que vous avez choisi en utilisant --build argument.

Après avoir exécuté CMake, vous vous retrouvez avec un fichier PACKAGE.vcxproj dans votre répertoire de construction. C'est ce qui va créer l'installateur. Vous pouvez soit créer le projet PACKAGE à partir de Visual Studio, soit appeler directement msbuild en procédant comme suit:

msbuild /P:Configuration=Release PACKAGE.vcxproj

à partir de votre répertoire de génération dans une invite de commande VS.

Cela devrait produire votre programme d'installation nommé MyLib-1.0.0-win64.exe, également dans votre répertoire de construction.


Si vous souhaitez simplement utiliser CMake, alors une alternative à l'appel de msbuild est:

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


Ou vous pouvez d'abord créer la solution, puis appeler CPack pour créer le programme d'installation:

cmake --build . --config Release
cpack -C Release
38
Fraser