7

cmake と cpack を使用して、Windows でいくつかのプログラムのインストーラーを作成したいと考えています。インストールするプログラムを選択できるようにしたいのですが、選択したプログラムがショートカットとしてスタート メニューに表示されます。これは簡単な試みです。プログラムごとに 1 つのコンポーネントを作成しましたが、スタート メニュー変数を生成する方法がわかりません。インストールするように選択されていない場合でも、すべてのプログラムが常にメニューに表示されるようになりました。まず、インストールする簡単なプログラムです。

#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のどの例でもスタート メニューのショートカットが生成されていないことがわかりました。

4

1 に答える 1

12

これは 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"
    
  • include(cpack) の直前に以下の行を CMakeLists.txt に追加します。

    set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}" ${CMAKE_MODULE_PATH})
    
于 2013-10-02T21:58:51.070 に答える