gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 01:45:23 24 4
gpt4 key购买 nike

我想使用 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中的任何示例都没有生成开始菜单快捷方式。还是我做错了什么?

最佳答案

这是 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 类似于下面的代码片段(取自 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})

关于c++ - 如何让 cpack 生成正确的开始菜单快捷方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18965206/

24 4 0