标签: cpack

CMake CPack debian包

有人使用CPack脚本的工作示例来处理具有Qt和OpenGL依赖关系的debian包吗?

我已经设置了这个

set (CPACK_DEBIAN_PACKAGE_DEPENDS "libc6 (>= 2.3.1-6), libgcc1 (>= 1:3.4.2-12), libQtOpenGL (>=4.6.0), libQtCore (>=4.6.0), libQtGui (>=4.6.0), libglut (>=3.0), libICE (>=6.0), libX11 (>=6.0), libXext (>=6.0), libXmu (>=6.0), libXi (>=6.0), libstdc++ (>=6.0), libm (>=6.0), libgcc_s (>=1.0), libc (>=6.0), libGLU, libGL (>=1.0), libpthread" )
Run Code Online (Sandbox Code Playgroud)

我用Google搜索,但从未找到一个有效的例子.我的主要问题是如何首先为libGLU设置依赖项,然后为libGL和以下库设置依赖项.

一旦我创建了deb,安装程序就会说

 **Error: Dependency is not satisfiable: libXXX**
Run Code Online (Sandbox Code Playgroud)

其中XXX是我之前列出的库(主要是Qt库)

目前我的cmake版本是2.8.2但是cpack_add_component命令不起作用

debian qt cmake cpack

6
推荐指数
2
解决办法
6450
查看次数

CPack包装多个包装

如何使用cpack打包多个包.多包如下:

A.tar.gz
---bin/hello
---lib/libhello.a
---B.tar.gz
   ---bin/demo
   ---lib/libdemo.a
Run Code Online (Sandbox Code Playgroud)

B.tar.gz包含在A.tar.gz中

cmake cpack

6
推荐指数
1
解决办法
928
查看次数

CMake/CPack可以为单个项目生成多个NSIS安装程序吗?

我有一个单一的项目(含子项目),为此,我想生成的而不是在一个单一的NSIS安装列出的多个组件的多个NSIS安装可执行文件.这可能吗?或者我是否需要将代码组织到单独的项目中?

windows cmake cpack

6
推荐指数
1
解决办法
601
查看次数

CPack:从子目录中删除INSTALL命令(googletest目录)

我正在使用CMake进行项目,并使用googletest进行测试用例.通过浏览互联网,将googletest源复制到存储库的子文件夹并将其包含在"add_subdirectory(googletest)"中似乎是一种常见做法.我做到了

现在我正在使用CPack为我的项目生成debian包.不幸的是,CPack生成的软件包与我的项目一起安装了googletest.这当然不是我想要的.

在googletest目录中,我在那里找到了一些INSTALL cmake命令,所以很明显,为什么会这样.现在的问题是 - 我该如何避免呢?我不喜欢从googletest修改CMakeLists.txt文件,因为我必须记住在更新时重新应用我的修改.是否有另一种方法可以在CPack中禁用这些安装?

c++ install cmake googletest cpack

6
推荐指数
3
解决办法
2000
查看次数

如何在CPack构建步骤后运行脚本?

我想在'package'目标之后运行一个脚本.add_custom_commandPOST_BUILD不起作用.

make package命令应该构建,打包和运行脚本.不需要单独的命令.

cmake cpack

6
推荐指数
0
解决办法
677
查看次数

CPack尝试建立所有目标

我有一个CMake项目,该项目由一个根CMakeLists和多个子项组成CMakeLists(每个项目一个)。

我试图CPack用于为这些项目之一(APP_client)生成.deb文件。但是,当我尝试运行时CPack,它将首先运行“预安装”并尝试构建所有目标。我只想构建所需的目标及其依赖项。

这是我添加到其中之一的内容CMakeLists

if(UNIX)
    INSTALL(
        TARGETS ${PROJECT_NAME} 
        COMPONENT ${PROJECT_NAME}
        DESTINATION ${PROJECT_INSTALL_PATH}
        )

    SET(CPACK_PACKAGE_DIRECTORY ${CMAKE_BINARY_DIR}/../deb)
    SET(CPACK_GENERATOR "DEB")
    SET(CPACK_PACKAGE_NAME ${PROJECT_NAME})
    SET(CPACK_PACKAGE_FILE_NAME ${PROJECT_NAME}-${PROJECT_version})
    SET(CPACK_DEBIAN_PACKAGE_NAME ${PROJECT_NAME})
    SET(CPACK_DEBIAN_PACKAGE_VERSION ${PROJECT_version})

    INCLUDE(CPack)
endif()
Run Code Online (Sandbox Code Playgroud)

这是我尝试运行时得到的 cpack -V

CPack: Enable Verbose
CPack Verbose: Read CPack config file: 
CPack Verbose: Read CPack configuration file: [...]/CPackConfig.cmake
CPack Verbose: Specified generator: DEB
CPack Verbose: Use generator: cmCPackDebGenerator
CPack Verbose: For project: APP_client
CPack: Create package using DEB
CPack Verbose: Read …
Run Code Online (Sandbox Code Playgroud)

cmake deb cpack

6
推荐指数
1
解决办法
795
查看次数

如何根据配置更改CPack包文件名?

在 CMake 中,使用 CPack 我想CPACK_PACKAGE_FILE_NAME包含-debug后缀,以防包是从调试配置生成的。对于单配置 CMake 生成器,这可能可以通过检查来实现CMAKE_BUILD_TYPE,但这不适用于 Visual Studio 等多配置生成器。

cmake cpack

6
推荐指数
1
解决办法
3532
查看次数

CPack:如何为组件指定不同的包版本?

我有一个CMake项目来构建多个共享库和工具,其中大部分都在子目录下:

add_directory(libFirst)
add_directory(libSecond)
add_directory(myTool)
# etc...
Run Code Online (Sandbox Code Playgroud)

install(TARGET "someTarget" COMPONENT "someTarget" ...)规则是在各个subdirectory/CMakeLists.txt文件.

我想使用make packagebuild目录中的命令为所有这些生成Debian包.我已经CPACK_DEB_COMPONENT_INSTALL开始了ON.

我面临的问题是,并非所有目标都具有相同VERSION和/或SOVERSION.例如,libFirst版本为1.0.0.0,libSecond版本为4.3.0.0.这意味着产生的包也应该有不同的版本,但我发现指定版本的唯一方法是指定的CPACK_PACKAGE_VERSION_MAJOR, CPACK_PACKAGE_VERSION_MINORCPACK_PACKAGE_VERSION_PATCH变量(或许还有内部CPACK_PACKAGE_VERSION变量),其中设置版本为所有生成的软件包.

有没有办法设置每个组件的包版本,例如通过设置一些变量与其他变量CPACK_COMPONENT_<COMPONENT>_*CPACK_DEBIAN_<COMPONENT>_*变量类似?

packaging cmake cpack

6
推荐指数
1
解决办法
352
查看次数

Cmake / Cpack Debian包装-产生正确的包装名称

我正在尝试使用Cpack构建一个正确命名的Debian软件包。我的CMakeLists.txt中包含以下内容:

set(CPACK_PACKAGE_NAME "something")
set(CPACK_DEBIAN_PACKAGE_ARCHITECTURE "amd64")
set(CPACK_PACKAGE_ARCHITECTURE "amd64")
set(CPACK_PACKAGE_VERSION_MAJOR "0")
set(CPACK_PACKAGE_VERSION_MINOR "9")
set(CPACK_PACKAGE_VERSION_PATCH "0")
set(CPACK_PACKAGE_VERSION "${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}.${CPACK_PACKAGE_VERSION_PATCH}")
Run Code Online (Sandbox Code Playgroud)

但我得到的文件名为:

 something-0.9.0-Linux.deb
Run Code Online (Sandbox Code Playgroud)

代替:

something-0.9.0_amd64.deb
Run Code Online (Sandbox Code Playgroud)

我查看了各种文档页面,但没有找到答案。

debian cpack

6
推荐指数
2
解决办法
816
查看次数

如何使用 CPackDeb 创建自启动 C++ systemd 服务?

我是 Debian 打包的新手,我相信这是一个相当基本的问题,但我很尴尬地说我已经在 Google 上被淘汰了。

我有一个 C++ 项目,它使用 CMake 构建并使用 CPack 打包一个 debian。这个项目有一个服务组件(systemd 风格)。我的目标是在安装包时启用和自动启动服务。

我的研究产生了两种方法:

1)systemctl在 Debian 的 {pre,post}{inst,rm} 脚本中运行各种命令。需要小心正确处理安装、删除和升级方案。

2) 只需将其project.service放在debian目录中,让debhelper(使用dh_systemd_enable)处理服务安装并“自动”启动。

选项 #2 显然是首选,因为 {pre,post}{inst,rm} 是非常手动的,因此容易出错,但我不知道是否有一种受支持的方法可以debhelper从 CPack 中进行利用。

问题:我想避免在我的项目的 CMake 中重写 debian 打包的东西,因为它已经存在了一段时间并且运行良好。我不清楚CPackDeb和之间的关系(如果有的话)debhelper——CPack 可以利用这些dh_systemd_enable功能还是我必须在 {pre,post}{inst,rm} 脚本中手动管理服务?

c++ cmake cpack systemd debhelper

6
推荐指数
0
解决办法
377
查看次数

标签 统计

cpack ×10

cmake ×9

c++ ×2

debian ×2

deb ×1

debhelper ×1

googletest ×1

install ×1

packaging ×1

qt ×1

systemd ×1

windows ×1