2013-09-23 14 views
6

Ich möchte ein Installer für einige Programme auf Windows mit cmake und cpack erstellen. Ich möchte in der Lage zu wählen, welche Programme zu installieren und die ausgewählten Programme im Startmenü als Verknüpfungen angezeigt werden sollen. Hier ist ein einfacher Versuch. Habe eine Komponente für jedes Programm gemacht, kann aber nicht herausfinden, wie man die Startmenü-Variable erzeugt. Jetzt sind alle Programme immer im Menü, auch wenn sie nicht zur Installation ausgewählt sind. Zuerst ist ein einfaches Programm zu installieren.Wie bekomme ich cpack um korrekte Startmenüverknüpfungen zu erzeugen

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

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

und hier ist die CMakeLists.txt Datei

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) 

Das Problem ist, Startmenü Verknüpfungen zu generieren je nachdem, welches Programm bei der Installation ausgewählt ist Ich dachte, es sollte einfach sein, aber es scheint nicht sein. Ist es möglich, dies zu tun?

Update: Ich finde, dass keine Startmenüverknüpfungen für irgendein Beispiel in http://www.cmake.org/Wiki/CMake:Component_Install_With_CPack erzeugt werden, oder mache ich etwas falsch?

Antwort

11

Es ist ein bekanntes Problem mit Cpack. siehe http://public.kitware.com/Bug/print_bug_page.php?bug_id=9846

Sie müssen NSIS Vorlage verwenden, um benutzerdefinierte Startmenüverknüpfungen zu erstellen.

Schritte:

  • Kopieren NSIS.template.in aus installiert Cmake Verzeichnis. (zB C: \ Programme \ CMake 2.8 \ share \ cmake-2.8 \ Module \ NSIS.template.in) zum Cmake Source Dir des Projekts.

  • -Update kopiert NSIS.template.in ähnlich wie unter Schnipsel (aus 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" 
    
  • unterhalb der Linie In dem CMakeLists.txt kurz vor umfassen (CPack):

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