cpack 组件安装不起作用

Posted

技术标签:

【中文标题】cpack 组件安装不起作用【英文标题】:cpack component install does not work 【发布时间】:2017-11-02 16:53:10 【问题描述】:

我希望 cpack 只使用某些组件。但他同时使用了 run 和 deb 组件。我查看了很多来源。包括这个cpack component level install。但我不明白我做错了什么。请告诉我,我做错了什么? 我的 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

【问题讨论】:

你使用哪个CPack生成器(即创建什么样的包——.tgz.rpm等)?请参阅wiki 了解为特定生成器启用组件打包。 是的,我尝试在我的 CMakeLists 集中写入(CPACK_TGZ_COMPONENT_INSTALL ON),但它也不起作用 所以您使用TGZ 包生成器,它会生成单个testProj.tgz 文件,其中包括temp.hAlpha0.400000.txt。我是否正确理解你现在所拥有的? 是的,但它会生成 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. 将 CPack 生成的这些消息添加到问题帖子中(通过edit)。 【参考方案1】:

只需将以下内容添加到您的 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 不使用组件安装。

【讨论】:

【参考方案2】:

在这种情况下,我认为你应该在 Cmake 创建的 package 目标上调用 make 而不是直接调用 cpack,即调用 make package 而不是 cpack .

或者,如果您确实直接调用 cpack,您可以将要打包的组件作为命令行参数传递。例如cpack -D CPACK_COMPONENTS_ALL="deb"(多个组件用';'分隔)

(注意正确的变量是CPACK_COMPONENTS_ALL 而不是CPACK_COMPONENT_ALL

More info on Cpack command line program

More info on Cpack Component Packaging

More info on Cpack Component Variables

More info on General CPack Variables

【讨论】:

以上是关于cpack 组件安装不起作用的主要内容,如果未能解决你的问题,请参考以下文章

更改组件 RPM 的 cpack 生成名称

使用 CMake 和 CPack 为一个组件创建包

CMake + CPack:安装整个目录(包括子文件夹)

如何使用 CPACK_INSTALL_COMMANDS?

Vue中的浅安装,存根不起作用

安装 CMake 组件时如何获取将要安装的文件列表