Создание значка рабочего стола Windows в CMake + CPack + NSIS

Я использую генератор пакетов NSIS в CMake 2.8.1 для распространения приложения Qt. Все работает нормально... за исключением использования CPACK_CREATE_DESKTOP_LINKS для создания ссылки на приложение на рабочем столе.

Я просмотрел ссылку Исходный код CMake (включая собственное определение установки "bootstrap" для Windows), и, насколько я могу судить, я делаю то же самое.

Вот соответствующий раздел моего файла CMakeLists.txt.


set(CPACK_GENERATOR NSIS)
set(CPACK_NSIS_PACKAGE_NAME "${EWS_APP_NAME}")
set(CPACK_NSIS_DISPLAY_NAME "${EWS_APP_NAME}")
set(CPACK_NSIS_CONTACT "${EWS_EMAIL}")
set(CPACK_PACKAGE_EXECUTABLES "${EXE_TARGET_NAME}" "${EWS_APP_NAME}")
set(CPACK_PACKAGE_INSTALL_REGISTRY_KEY "${CMAKE_PROJECT_NAME}-${EWS_VERSION}")

# this works
set(CPACK_NSIS_MENU_LINKS "${EWS_WEBSITE}" "Homepage for ${EWS_APP_NAME}")

# this doesn't
set(CPACK_CREATE_DESKTOP_LINKS "${EXE_TARGET_NAME}")

# Icon in the add/remove control panel. Must be an .exe file 
set(CPACK_NSIS_INSTALLED_ICON_NAME bin\\\\${EXE_TARGET_NAME}.exe)

set(CPACK_NSIS_URL_INFO_ABOUT "${EWS_WEBSITE}")
set(CPACK_NSIS_HELP_LINK "${EWS_WEBSITE}")

Любые идеи или советы по отладке приветствуются!


person metasim    schedule 14.04.2010    source источник


Ответы (5)


попробуйте добавить это в свой CMakeLists.txt:

set (CPACK_NSIS_MODIFY_PATH "ON")

Я думаю, что после лицензии следует добавить страницу, которая дает возможность добавить каталог установки к пути и добавить возможность создавать ссылки на рабочий стол.

person choobablue    schedule 04.06.2010

Один обходной путь, который я выяснил, заключается в использовании CPACK_NSIS_EXTRA_INSTALL_COMMANDS и CPACK_NSIS_EXTRA_UNINSTALL_COMMANDS для прямой вставки команд создания/удаления ссылки.

set(CPACK_NSIS_EXTRA_INSTALL_COMMANDS "
    CreateShortCut \\\"$DESKTOP\\\\${EWS_APP_NAME}.lnk\\\" \\\"$INSTDIR\\\\bin\\\\${EXE_TARGET_NAME}.exe\\\"
")

set(CPACK_NSIS_EXTRA_UNINSTALL_COMMANDS "
    Delete \\\"$DESKTOP\\\\${EWS_APP_NAME}.lnk\\\"
")

Я бы предпочел использовать более общую (и кросс-платформенную?) настройку CPACK_CREATE_DESKTOP_LINKS, поэтому любые последующие идеи приветствуются. Но это работает в крайнем случае.

person metasim    schedule 15.04.2010

Для тех, кто знаком с этой веткой, есть переменные CMake CPACK_NSIS_CREATE_ICONS_EXTRA и CPACK_NSIS_DELETE_ICONS_EXTRA, которые можно использовать для создания произвольных ярлыков (меню «Пуск», рабочий стол и т. д.). На стороне удаления может быть небольшая проблема, но это все же относительно простой и гибкий способ получить ярлыки там, где вы хотите. Дополнительным бонусом является то, что вы также можете добавить аргументы командной строки, если это необходимо. В этой небольшой статье объясняется, как использовать эти переменные для создания и удаления элементов меню "Пуск", а также ссылки на документацию по другим полезным переменным NSIS. Должно быть достаточно просто использовать подход для ярлыков на рабочем столе с представленной там информацией.

person Craig Scott    schedule 29.08.2015

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

macro(prepareNSIS_Link linkName appName params)
 #prepare start menu links
 LIST(APPEND CPACK_NSIS_CREATE_ICONS_EXTRA "  CreateShortCut '$SMPROGRAMS\\\\$STARTMENU_FOLDER\\\\${linkName}.lnk' '$INSTDIR\\\\bin\\\\${appName}.exe' '${params}'")
 LIST(APPEND CPACK_NSIS_DELETE_ICONS_EXTRA "  Delete '$SMPROGRAMS\\\\$START_MENU\\\\${linkName}.lnk'")

 #prepare desktop links
 LIST(APPEND CPACK_NSIS_CREATE_ICONS_EXTRA  "  CreateShortCut '$DESKTOP\\\\${linkName}.lnk' '$INSTDIR\\\\bin\\\\${appName}.exe' '${params}'")
 LIST(APPEND CPACK_NSIS_DELETE_ICONS_EXTRA  "  Delete '$DESKTOP\\\\${linkName}.lnk'")
endmacro()

Чтобы создать ссылку для [installFolder]/bin/app.exe -some -parameters, назовите ее так:

prepareNSIS_Link("My application" "app" "-some -parameters")

После того, как вы настроите все свои ссылки, будьте любезны и замените точки с запятой на новые строки:

  string (REPLACE ";" "\n" CPACK_NSIS_CREATE_ICONS_EXTRA "${CPACK_NSIS_CREATE_ICONS_EXTRA}")
  string (REPLACE ";" "\n" CPACK_NSIS_DELETE_ICONS_EXTRA "${CPACK_NSIS_DELETE_ICONS_EXTRA}")
person Pierluigi    schedule 16.03.2016

Скорее всего, вам не нужно заключать ${EXE_TARGET_NAME} в кавычки, так как это строка.

person RobertJMaynard    schedule 16.04.2010
comment
Правда (просто привычка с моей стороны), но на результат не влияет. - person metasim; 17.04.2010