установка компонента cpack не работает

Я хочу, чтобы cpack брал только определенные компоненты. Но он берет как run, так и deb компоненты. Я просмотрел множество источников. включая эту установку на уровне компонентов cpack. но я не понимал, что делаю не так. Подскажите пожалуйста, что я сделал не так? Мой CMakeLists.txt

cmake_minimum_required(VERSION 3.8)
project(testProj)

set(CMAKE_CXX_STANDARD 11)

set(SOURCE_FILES main.cpp)
add_executable(testProj ${SOURCE_FILES})

set(CMAKE_INSTALL_PREFIX .)

install(FILES temp.h DESTINATION someFolder
        PERMISSIONS OWNER_READ OWNER_WRITE WORLD_READ WORLD_EXECUTE COMPONENT deb
        )

install(FILES Alpha0.400000.txt DESTINATION someFolder
        PERMISSIONS OWNER_READ OWNER_WRITE WORLD_READ WORLD_EXECUTE COMPONENT run
        )

set(CPACK_TGZ_COMPONENT_INSTALL ON)
set(CPACK_COMPONENT_ALL deb)
set(CPACK_COMPONENTS_ALL deb)

include(CPack)

мои шаги, чтобы получить артефакт

cmake . 
make 
cpack .

CPack: Create package using STGZ
CPack: Install projects
CPack: - Run preinstall target for: testProj
CPack: - Install project: testProj
CPack: Create package
CPack: - package: /home/danyal/testProj/test/testProj-0.1.1-Linux.sh generated.
CPack: Create package using TGZ
CPack: Install projects
CPack: - Run preinstall target for: testProj
CPack: - Install project: testProj
CPack: Create package
CPack: - package: /home/danyal/testProj/test/testProj-0.1.1-Linux.tar.gz generated.
CPack: Create package using TZ
CPack: Install projects
CPack: - Run preinstall target for: testProj
CPack: - Install project: testProj
CPack: Create package
CPack: - package: /home/danyal/testProj/test/testProj-0.1.1-Linux.tar.Z generated.

и testProj-0.1.1-Linux.tar.gz содержит

someFolder
   -temp.h
   -Alpha0.400000.txt

person Danyal Mugutdinov    schedule 02.11.2017    source источник
comment
Какой генератор CPack вы используете (то есть какой пакет создается - .tgz, .rpm и т. Д.)? См. wiki о включении упаковки компонентов для конкретного генератора.   -  person Tsyvarev    schedule 02.11.2017
comment
Да, я пробовал писать в свой набор CMakeLists (CPACK_TGZ_COMPONENT_INSTALL ON), но он также не работает   -  person Danyal Mugutdinov    schedule 03.11.2017
comment
Итак, вы используете генератор пакетов TGZ, и он создает один файл testProj.tgz, который включает как temp.h, так и Alpha0.400000.txt. Я правильно понимаю, что у вас сейчас?   -  person Tsyvarev    schedule 03.11.2017
comment
да, но он генерирует tar.gz CPack: Create package using TGZ CPack: Install projects CPack: - Run preinstall target for: testProj CPack: - Install project: testProj CPack: Create package CPack: - package: /home/danyal/testProj/test/testProj-0.1.1-Linux.tar.gz generated.   -  person Danyal Mugutdinov    schedule 03.11.2017
comment
Добавьте эти сообщения, созданные CPack, в сообщение с вопросом (через edit).   -  person Tsyvarev    schedule 03.11.2017


Ответы (2)


Просто добавьте следующее в свой CMakeLists.txt

set(CPACK_ARCHIVE_COMPONENT_INSTALL 1)

Я столкнулся с той же проблемой, и мне пришлось погрузиться в источник, чтобы найти ответ. Следующая функция дает ответ:

bool cmCPackArchiveGenerator::SupportsComponentInstallation() const
{
  // The Component installation support should only
  // be activated if explicitly requested by the user
  // (for backward compatibility reason)
  return IsOn("CPACK_ARCHIVE_COMPONENT_INSTALL");
}

По соображениям совместимости любая упаковка архива, то есть ZIP и TGZ, не использует установку компонентов.

person Twan Spil    schedule 09.04.2019

В этом сценарии, я думаю, вам следует вызвать make для цели package, созданной Cmake, а не напрямую вызывать cpack, то есть вызывать make package вместо cpack ..

В качестве альтернативы, если вы вызываете cpack напрямую, вы можете передать компоненты, которые хотите упаковать, в качестве аргумента командной строки. например cpack -D CPACK_COMPONENTS_ALL="deb" (через ";" для нескольких компонентов)

(Обратите внимание, что правильная переменная - CPACK_COMPONENTS_ALL, а не CPACK_COMPONENT_ALL)

person AndrewJC    schedule 14.04.2018