Как создать установщик с CMake + CPack + NSIS для Windows?

Я хотел бы создать кроссплатформенный установщик для системы на C ++, которую я строю.

Я использую CMake для сборки всего, и было бы здорово, если бы я мог использовать CPack для создания установщика. У меня уже есть CPack, работающий на OSX, но я не могу заставить его работать на Windows. Чтобы упростить ситуацию, я попытался привести пример на http://www.cmake.org/Wiki/CMake:Packaging_With_CPack работать с программой установки NSIS. Я не могу найти установщик NSIS нигде после настройки (с генератором Win 2010 VS 2010).

Может быть, я запутался, но подумал, что можно будет создать установочный пакет только с исходным кодом, CMake, CPack и NSIS без необходимости в Visual Studio. Это возможно?

Ссылка на полный учебник (тот, на http://www.cmake.org/Wiki/CMake:Component_Install_With_CPack пропуски соответствующей информации, чтобы заставить работать NSIS и не упоминающие генераторы или компиляторы) были бы очень полезны, или было бы замечательно базовое объяснение того, как я могу добраться до этого мифически сгенерированного установщика NSIS.

Вот CMakeLists.txt для примера выше:

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)

18

Решение

… Я думал, что было бы возможно создать установочный пакет только с исходным кодом, CMake, CPack и NSIS без какой-либо необходимости в Visual Studio. Это возможно?

Вид. Это зависит от того, что вы подразумеваете под «без необходимости в Visual Studio». Вам нужен инструмент для сборки, чтобы создать lib и exe. В Windows вам нужно что-то вроде msbuild для Visual Studio, особенно если вы указали "Visual Studio 10 Win64" как генератор.

Если вы имеете в виду «без запуска Visual Studio», то ответ — да. Вы можете заставить CMake выполнить выбранный вами инструмент сборки, используя --build аргумент.

После запуска CMake вы получите файл PACKAGE.vcxproj в вашей директории сборки. Это строит это, которое создаст установщик. Вы можете либо построить проект PACKAGE из Visual Studio, либо вы можете вызвать msbuild напрямую, выполнив:

msbuild /P:Configuration=Release PACKAGE.vcxproj

из вашего каталога сборки в командной строке VS.

Это должно привести к тому, что ваш установщик с именем MyLib-1.0.0-win64.exe также находится в вашей директории сборки.

Если вы хотите просто использовать CMake, тогда альтернативой вызову msbuild является:

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

Или вы можете сначала создать решение, а затем вызвать CPack для создания установщика:

cmake --build . --config Release
cpack -C Release
30

Другие решения

Других решений пока нет …