Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

how get cpack to generate correct start menu shortcuts

I want to create an installer for some programs on windows with cmake and cpack. I want to be able to select which programs to install and the selected programs shall show up in the start menu as shortcuts. Here is a simple try. Have done one component for each program but can't figure out how to generate the start-menu variable. Now all programs are always in the menu even if they are not selected to be installed. First is a simple program to be installed.

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

int main()
{
  std::cout << "prog1" << std::endl;
  _getch();
  return 0;
}

and here is the CMakeLists.txt file

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)

The problem is to generate start menu shortcuts depending on which program is selected in the installation I thought it should be easy but it seems not to be. Is it possible to do this?

Update: I find that no start menu shortcuts are generated for any example in http://www.cmake.org/Wiki/CMake:Component_Install_With_CPack or am I doing something wrong?

like image 736
lgwest Avatar asked Sep 23 '13 17:09

lgwest


1 Answers

It is a known issue with cpack. see http://public.kitware.com/Bug/print_bug_page.php?bug_id=9846

You need to use NSIS template to create customised start menu shortcuts.

Steps :

  • Copy NSIS.template.in from installed cmake directory. (eg C:\Program Files\CMake 2.8\share\cmake-2.8\Modules\NSIS.template.in) to your project's Cmake Source Dir.

  • Update copied NSIS.template.in similar to below snippet (taken from 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"
    
  • Add below line to CMakeLists.txt just before include(cpack) :

    set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}" ${CMAKE_MODULE_PATH})
    
like image 198
prakash Avatar answered Sep 20 '22 07:09

prakash