代码之家  ›  专栏  ›  技术社区  ›  metasim

在cmake+cpack+nsis中创建Windows桌面图标

  •  9
  • metasim  · 技术社区  · 15 年前

    我在cmake 2.8.1中使用nsis包生成器来分发qt应用程序。一切正常…除了使用 CPACK_CREATE_DESKTOP_LINKS 创建到应用程序的桌面链接。

    我已经看过了 CMake source (包括它自己针对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 年前
        1
  •  9
  •   choobablue    15 年前

    尝试将此添加到 CMakeLists.txt :

    set (CPACK_NSIS_MODIFY_PATH "ON")
    

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

        2
  •  3
  •   metasim    15 年前

    我发现一个解决办法是 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 设置,所以任何后续想法都会受到赞赏。但这在紧急情况下有效。

        3
  •  1
  •   Craig Scott    9 年前

    对于其他遇到这种情况的人来说, cpack_nsis_创建_图标_extra cpack_nsis_删除_图标_extra CMAKE变量,可用于创建任意快捷方式(开始菜单、桌面等)。删除方面的东西可以有一个小的gotcha,但它仍然是一个相对容易和灵活的方式,以获得快捷方式在你想要的地方。另外,如果需要,还可以添加命令行参数。 This short article 解释如何使用这些变量创建和删除“开始”菜单项,并包含指向其他有用NSI变量文档的链接。对于桌面快捷方式来说,使用其中提供的信息应该足够简单。

        4
  •  1
  •   Pierluigi    9 年前

    我正在使用以下宏将指向“程序文件”菜单和桌面的链接都添加到桌面

    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}")
    
        5
  •  0
  •   RobertJMaynard    15 年前

    您很可能不需要引用$exe_target_name,因为它是一个字符串。

    推荐文章