Создание иконки рабочего стола Windows в CMake + CPack + NSIS - PullRequest
9 голосов
/ 15 апреля 2010

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

Я просмотрел исходник CMake (включая его собственное определение установки "начальной загрузки" для 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}")

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

Ответы [ 5 ]

9 голосов
/ 04 июня 2010

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

set (CPACK_NSIS_MODIFY_PATH "ON")

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

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

1 голос
/ 16 марта 2016

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

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}")
1 голос
/ 29 августа 2015

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

0 голосов
/ 16 апреля 2010

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

...