Windows installer 在CMake+;中创建Windows桌面图标;CPack&x2B;NSIS

Windows installer 在CMake+;中创建Windows桌面图标;CPack&x2B;NSIS,windows-installer,cmake,nsis,Windows Installer,Cmake,Nsis,我正在使用CMake 2.8.1中的NSIS包生成器分发Qt应用程序。一切正常。。。除了使用CPACK\u CREATE\u DESKTOP\u LINKS创建指向应用程序的桌面链接之外 我已经看过了(包括它自己的windows“引导”安装定义),据我所知,我正在做同样的事情 这是我的CMakeLists.txt文件的相关部分 set(CPACK_GENERATOR NSIS) set(CPACK_NSIS_PACKAGE_NAME "${EWS_APP_NAME}") set(CPACK_N

我正在使用CMake 2.8.1中的NSIS包生成器分发Qt应用程序。一切正常。。。除了使用
CPACK\u CREATE\u DESKTOP\u LINKS
创建指向应用程序的桌面链接之外

我已经看过了(包括它自己的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}")

任何想法或调试技巧都将不胜感激

我发现的一个解决方法是使用
CPACK\u NSIS\u EXTRA\u INSTALL\u命令
CPACK\u NSIS\u EXTRA\u UNINSTALL\u命令
直接插入链接创建/删除命令

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\u CREATE\u DESKTOP\u LINKS
的设置,因此任何后续想法都将受到欢迎。但这在紧要关头起作用。

您很可能不需要引用${EXE\u TARGET\u NAME},因为它是一个字符串。

尝试将其添加到
CMakeLists.txt

set (CPACK_NSIS_MODIFY_PATH "ON")

我认为应该在许可证后添加一个页面,提供将安装目录添加到路径的选项,并添加创建桌面链接的选项。

对于遇到此线程的其他人,有CPACK\u NSIS\u create\u ICONS\u EXTRA和CPACK\u NSIS\u DELETE\u ICONS\u EXTRA CMake变量,可用于创建任意快捷方式(开始菜单、桌面等)。删除方面可能有一个小问题,但它仍然是一种相对容易和灵活的方法,可以在需要的地方获取快捷方式。额外的好处是,如果需要,您还可以添加命令行参数。说明如何使用这些变量创建和删除“开始”菜单项,并包括指向其他有用NSI文档的链接S变量。使用桌面快捷方式的方法以及其中显示的信息应该很容易。

我正在使用以下宏将程序文件菜单的链接添加到桌面

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}")
没错(这只是我的一个习惯),但并不影响结果。