2013-09-23 3 views
6

cmake 및 cpack이 포함 된 Windows에서 일부 프로그램의 설치 프로그램을 만들고 싶습니다. 설치할 프로그램을 선택할 수있게하려면 선택한 프로그램을 시작 메뉴에 바로 가기로 표시하십시오 ( ). 여기 간단한 시도가 있습니다. 각 프로그램마다 하나의 구성 요소를 수행했지만 시작 메뉴 변수를 생성하는 방법을 알 수 없습니다. 이제 모든 프로그램은 설치하도록 선택하지 않은 경우에도 항상 메뉴에 있습니다. 첫 번째는 설치할 간단한 프로그램입니다.올바른 시작 메뉴 바로 가기를 생성하기 위해 cpack을 얻는 방법

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

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

여기가

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) 

문제는 프로그램은 내가 쉽게해야한다 생각 설치에 선택에 따라 시작 메뉴의 바로 가기를 생성하는 것입니다 CMakeLists.txt 파일이지만하지 보인다 되려고. 이것을 할 수 있습니까?

업데이트 : http://www.cmake.org/Wiki/CMake:Component_Install_With_CPack의 모든 예제에 대한 시작 메뉴 바로 가기가 생성되지 않았거나 잘못된 것이 있습니까?

답변

11

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 Source Dir에 추가하십시오.

  • 업데이트 미리보기 아래에 유사한 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" 
    
  • 이 (cpack를) 직전 CMakeLists.txt에 선 아래 추가 포함 :

    set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}" ${CMAKE_MODULE_PATH}) 
    
관련 문제