2013-09-23 20 views
6

Voglio creare un programma di installazione per alcuni programmi su Windows con cmake e cpack. Voglio essere in grado di selezionare quali programmi installare e i programmi selezionati devono apparire nel menu di avvio come scorciatoie. Ecco un tentativo semplice. Ho fatto un componente per ogni programma ma non riesco a capire come generare la variabile del menu di avvio. Ora tutti i programmi sono sempre nel menu anche se non sono selezionati per l'installazione. Il primo è un semplice programma da installare.come ottenere cpack per generare i collegamenti corretti del menu di avvio

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

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

e qui è il file 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) 

Il problema è quello di generare collegamenti del menu di avvio a seconda di quale viene selezionato il programma nell'installazione ho pensato che dovrebbe essere facile, ma non sembra essere. È possibile farlo

Aggiornamento: trovo che nessun collegamento del menu di avvio è generato per qualsiasi esempio in http://www.cmake.org/Wiki/CMake:Component_Install_With_CPack o sto facendo qualcosa di sbagliato?

risposta

11

È un problema noto con cpack. vedere http://public.kitware.com/Bug/print_bug_page.php?bug_id=9846

È necessario utilizzare il modello NSIS per creare scorciatoie personalizzate del menu di avvio.

Passi:

  • Copia NSIS.template.in dalla directory cmake installato. (ad es. C: \ Programmi \ CMake 2.8 \ share \ cmake-2.8 \ Modules \ NSIS.template.in) nel Cmake Source Dir del progetto.

  • aggiornamento copiato NSIS.template.in simile al di sotto del frammento (tratto da 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" 
    
  • Aggiungi sotto la linea di CMakeLists.txt poco prima include (CPack):

    set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}" ${CMAKE_MODULE_PATH})