我在CMake 2.8.1中使用NSIS包生成器来分发Qt应用程序。一切都运行正常......除了使用CPACK_CREATE_DESKTOP_LINKS
创建到应用程序的桌面链接。
我查看了CMake source(包括它自己的“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}")
任何想法或调试技巧都表示赞赏!
答案 0 :(得分:9)
尝试将此添加到您的CMakeLists.txt
:
set (CPACK_NSIS_MODIFY_PATH "ON")
我认为应该在许可证之后添加一个页面,该页面提供了将安装目录添加到路径的选项,并添加了创建桌面链接的选项。
答案 1 :(得分:3)
我想通过一种解决方法是使用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
设置,因此任何后续想法都会受到赞赏。但这很有效。
答案 2 :(得分:1)
对于遇到此主题的其他人,可以使用 CPACK_NSIS_CREATE_ICONS_EXTRA 和 CPACK_NSIS_DELETE_ICONS_EXTRA CMake变量来创建任意快捷方式(开始菜单,桌面,等等。)。事物的删除方面可能有一个小问题,但它仍然是一种相对容易和灵活的方式来获得你想要的捷径。额外的好处是,如果需要,您还可以添加命令行参数。 This short article解释了如何使用这些变量来创建和删除“开始”菜单项,并包含指向其他有用NSIS变量的文档的链接。使用桌面快捷方式的方法与其中提供的信息一起应该很容易。
答案 3 :(得分:1)
我正在使用以下宏将程序文件菜单中的链接添加到桌面
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}")
答案 4 :(得分:0)
您很可能不需要引用$ {EXE_TARGET_NAME},因为它是一个字符串。