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

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

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

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


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}")

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

5 ответов


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

set (CPACK_NSIS_MODIFY_PATH "ON")

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


одна работа-вокруг я понял, чтобы использовать 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 настройка, поэтому любые последующие идеи ценятся. Но это работает в крайнем случае.


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


Я использую следующий макрос для добавления ссылок как в меню program files на рабочий стол

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()

чтобы создать ссылку на for [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}")

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