2013-09-23 9 views
6

Chcę utworzyć instalator dla niektórych programów w oknach z cmake i cpack. Chcę móc wybrać programy do zainstalowania, a wybrane programy będą wyświetlane w menu Start jako skróty. Oto prosta próba. Zrobiłem jeden komponent dla każdego programu , ale nie mogę dowiedzieć się, jak wygenerować zmienną menu Start. Teraz wszystkie programy są zawsze w menu, nawet jeśli nie zostały wybrane do zainstalowania. Pierwszy to prosty program do zainstalowania.jak uzyskać cpack, aby wygenerować poprawne skróty menu startowego

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

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

i tutaj jest plik 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) 

Problemem jest generowanie skrótów w menu Start w zależności od programu, który jest wybierany w instalacji myślałem, to powinno być łatwe, ale nie wydaje być. Czy to możliwe?

Aktualizacja: Uważam, że nie ma skrótów menu Start dla dowolnego przykładu w http://www.cmake.org/Wiki/CMake:Component_Install_With_CPack lub czy robię coś nie tak?

Odpowiedz

11

Jest to znany problem z cpack. zobacz http://public.kitware.com/Bug/print_bug_page.php?bug_id=9846

Musisz użyć szablonu NSIS, aby utworzyć niestandardowe skróty menu startowego.

Kroki:

  • Kopiowanie NSIS.template.in z zainstalowanym katalogu cmake. (np. C: \ Program Files \ CMake 2.8 \ share \ cmake-2.8 \ Modules \ NSIS.template.in) do źródła projektu Cmake Dir.

  • Aktualizacja kopiowane NSIS.template.in podobny do poniżej fragmencie (zaczerpnięte z 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" 
    
  • Dodaj poniżej linii CMakeLists.txt tuż przed include (cpack):

    set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}" ${CMAKE_MODULE_PATH}) 
    
Powiązane problemy