Как получить Cpack для создания правильных ярлыков меню Пуск

Я хочу создать установщик для некоторых программ на Windows с помощью cmake и cpack.
Я хочу иметь возможность выбрать, какие программы устанавливать, и выбранные программы должны
отображаются в меню «Пуск» в виде ярлыков. Вот простая попытка. Сделали один компонент для каждой программы
но не могу понять, как создать переменную меню пуск. Теперь все программы всегда в меню, даже если они не выбраны для установки. Сначала простая программа для установки.

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

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

и вот файл 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)

Проблема заключается в создании ярлыков меню Пуск в зависимости от того, какая программа выбрана в установке
Я думал, что это должно быть легко, но, похоже, нет. Можно ли сделать это.

Обновление: я обнаружил, что для любого примера в http://www.cmake.org/Wiki/CMake:Component_Install_With_CPack или я что-то не так делаю?

6

Решение

Это известная проблема с cpack.
увидеть http://public.kitware.com/Bug/print_bug_page.php?bug_id=9846

Вам нужно использовать шаблон NSIS для создания настраиваемых ярлыков меню Пуск.

Шаги:

  • Скопируйте NSIS.template.in из установленного каталога cmake. (например, 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"
  • Добавьте строку ниже в CMakeLists.txt непосредственно перед включением (cpack):

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

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector