如何让 cpack 生成正确的开始菜单快捷方式

Posted

技术标签:

【中文标题】如何让 cpack 生成正确的开始菜单快捷方式【英文标题】:how get cpack to generate correct start menu shortcuts 【发布时间】:2013-09-23 17:21:15 【问题描述】:

我想用 cmake 和 cpack 为 windows 上的一些程序创建一个安装程序。 我希望能够选择要安装的程序以及所选程序应 在开始菜单中显示为快捷方式。这是一个简单的尝试。为每个程序完成了一个组件 但无法弄清楚如何生成开始菜单变量。现在所有程序都在菜单中,即使它们没有被选择安装。首先是一个要安装的简单程序。

#include <iostream>
#include <conio.h>

int main()

  std::cout << "prog1" << std::endl;
  _getch();
  return 0;

这里是 CMakeLists.txt 文件

cmake_minimum_required( VERSION 2.8 )
project ( CompoTest )

add_executable(prog1 prog1.cpp)
add_executable(prog2 prog2.cpp)
add_executable(prog3 prog3.cpp)

install(TARGETS prog1
        RUNTIME DESTINATION bin
        COMPONENT compo1)
install(TARGETS prog2
        RUNTIME DESTINATION bin
        COMPONENT compo2)
install(TARGETS prog3
        RUNTIME DESTINATION bin
        COMPONENT compo3)

set ( CPACK_PACKAGE_VERSION "1.0.0" )

set(CPACK_PACKAGE_EXECUTABLES 
    prog1 "prog 1"
    prog2 "prog 2"
    prog3 "prog 3"
)

set ( CPACK_COMPONENTS_ALL compo1 compo2 compo3 )
include (CPack)

问题是根据安装时选择的程序生成开始菜单快捷方式 我认为这应该很容易,但似乎并非如此。可以这样做吗?

更新:我发现http://www.cmake.org/Wiki/CMake:Component_Install_With_CPack 中的任何示例都没有生成开始菜单快捷方式,还是我做错了什么?

【问题讨论】:

【参考方案1】:

这是 cpack 的一个已知问题。 见http://public.kitware.com/Bug/print_bug_page.php?bug_id=9846

您需要使用 NSIS 模板来创建自定义的开始菜单快捷方式。

步骤:

从已安装的 cmake 目录复制 NSIS.template.in。 (例如 C:\Program Files\CMake 2.8\share\cmake-2.8\Modules\NSIS.template.in)到您项目的 Cmake 源目录。

更新复制的 NSIS.template.in 类似于下面的 sn-p(取自 http://public.kitware.com/Bug/print_bug_page.php?bug_id=9846):

if (executable file is in component 'x')  
  if (installing component 'x')  
    CreateShortCut "$SMPROGRAMS\$STARTMENU_FOLDER\x.lnk" "$INSTDIR\x.exe"

if (uninstalling executable x)  
  Delete "$SMPROGRAMS\$MUI_TEMP\x.lnk"

在 CMakeLists.txt 的 include(cpack) 之前添加以下行:

set(CMAKE_MODULE_PATH "$CMAKE_CURRENT_SOURCE_DIR" $CMAKE_MODULE_PATH)

【讨论】:

以上是关于如何让 cpack 生成正确的开始菜单快捷方式的主要内容,如果未能解决你的问题,请参考以下文章

如何在 CPACK 和 NSIS 中为文本文件添加开始菜单条目

如何使用 NSIS 将快捷方式固定到开始菜单?

win10怎么把开始菜单中程序图标设置桌面快捷方式

开始菜单图标全白了

[转]NSIS 制作安装包无法创建桌面快捷方式或无法删除开始菜单项

怎样向开始菜单添加快捷命令 电脑怎么创建运行快捷方式到开始菜单