cpack 组件级安装

Posted

技术标签:

【中文标题】cpack 组件级安装【英文标题】:cpack component level install 【发布时间】:2013-05-21 07:00:57 【问题描述】:

对于附加到 CMake wiki 的示例 CMakeLists.txt。我还在下面添加了实际的 make 命令来创建基于组件的 TGZ。我很困惑,在文档中没有看到任何帮助。

CMakeLists.txt

cmake_minimum_required(VERSION 2.6.0 FATAL_ERROR)
project(MyLib)

if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
    set(CMAKE_INSTALL_PREFIX "/usr" CACHE PATH "Install path prefix prepended on to install directories." FORCE)
endif(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)

set(CPACK_PACKAGE_NAME "MyLib")
set(CPACK_PACKAGE_VENDOR "CMake.org")
set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "MyLib - CPack Component Installation Example")
set(CPACK_PACKAGE_VERSION "1.0.0")
set(CPACK_PACKAGE_VERSION_MAJOR "1")
set(CPACK_PACKAGE_VERSION_MINOR "0")
set(CPACK_PACKAGE_VERSION_PATCH "0")
set(CPACK_PACKAGE_INSTALL_DIRECTORY "CPack Component Example")


add_library(mylib mylib.cpp)

add_executable(mylibapp mylibapp.cpp)
target_link_libraries(mylibapp mylib)

install(TARGETS mylib 
   ARCHIVE
   DESTINATION lib
   COMPONENT libraries)
install(TARGETS mylibapp
   RUNTIME
   DESTINATION bin
   COMPONENT applications)
install(FILES mylib.h
   DESTINATION include
   COMPONENT headers)

set(CPACK_COMPONENTS_ALL applications libraries headers)

set(CPACK_COMPONENT_APPLICATIONS_DISPLAY_NAME "MyLib Application")
set(CPACK_COMPONENT_LIBRARIES_DISPLAY_NAME "Libraries")
set(CPACK_COMPONENT_HEADERS_DISPLAY_NAME "C++ Headers")

set(CPACK_COMPONENT_APPLICATIONS_DESCRIPTION 
   "An extremely useful application that makes use of MyLib")
set(CPACK_COMPONENT_LIBRARIES_DESCRIPTION
   "Static libraries used to build programs with MyLib")
set(CPACK_COMPONENT_HEADERS_DESCRIPTION
   "C/C++ header files for use with MyLib")


set(CPACK_GENERATOR "TGZ")
set(CPACK_ARCHIVE_COMPONENT_INSTALL ON)
set(CPACK_INCLUDE_TOPLEVEL_DIRECTORY OFF)
set(CPACK_COMPONENT_INCLUDE_TOPLEVEL_DIRECTORY OFF)
set(CPACK_SET_DESTDIR ON)
set(CPACK_PACKAGE_CONTACT "jhf")

# This must always be last!
include(CPack)

我有一个类似的 CMakeLists.txt,当我执行 make package 时,我最终会在 TGZ 中获取我所有的二进制文件和库。如果我只需要带有上述 CMakeLists.txt 中的应用程序组件的 TGZ,make package 命令应该是什么?

【问题讨论】:

【参考方案1】:

这很简单。 只需将 CMAKE 变量 CPACK_COMPONENTS_ALL 设置为您希望在安装中出现的组件列表:

SET(CPACK_COMPONENTS_ALL applications) #only pack "applications" component

【讨论】:

请注意,如果您为 CPACK_COMPONENTS_ALL 包含多个组件并且您想要一个包含所有组件的存档(而不是每个组件一个存档),您可以设置以下内容:set(CPACK_COMPONENTS_GROUPING ALL_COMPONENTS_IN_ONE)@987654321 @【参考方案2】:

看看 CPackComponent。

我和你有完全相同的问题。

我是cmake的初学者,今天我尝试了一整天,刚才我注意到一个名为CPackComponent的cmake模块开始出现在cmake 2.8.5标准模块中。

目前,我还不确定这是否是原因。但是您列出的文档中的变量可以在这个模块中找到。

cmake 2.8.5 是其标准模块中包含 CPackComponent 的最早版本。

在http://www.cmake.org/cmake/help/v2.8.5/cmake.html#module:CPackComponent检查一下

而cmake 2.8.8 是最早列出你想要的变量的版本。例如CPACK_COMPONENTS_ALL

这里http://www.cmake.org/cmake/help/v2.8.8/cmake.html#module:CPackComponent

对不起,我也是新手,帮不了你了。

【讨论】:

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

更改组件 RPM 的 cpack 生成名称

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

如何使用 CPACK_INSTALL_COMMANDS?

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

如何让 cpack 生成正确的开始菜单快捷方式

CPack / CMake:每个 CPACK_GENERATOR 的不同安装前缀