有人使用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命令不起作用
如何使用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中
我有一个单一的项目(含子项目),为此,我想生成的而不是在一个单一的NSIS安装列出的多个组件的多个NSIS安装可执行文件.这可能吗?或者我是否需要将代码组织到单独的项目中?
我正在使用CMake进行项目,并使用googletest进行测试用例.通过浏览互联网,将googletest源复制到存储库的子文件夹并将其包含在"add_subdirectory(googletest)"中似乎是一种常见做法.我做到了
现在我正在使用CPack为我的项目生成debian包.不幸的是,CPack生成的软件包与我的项目一起安装了googletest.这当然不是我想要的.
在googletest目录中,我在那里找到了一些INSTALL cmake命令,所以很明显,为什么会这样.现在的问题是 - 我该如何避免呢?我不喜欢从googletest修改CMakeLists.txt文件,因为我必须记住在更新时重新应用我的修改.是否有另一种方法可以在CPack中禁用这些安装?
我想在'package'目标之后运行一个脚本.add_custom_command与POST_BUILD不起作用.
该make package命令应该构建,打包和运行脚本.不需要单独的命令.
我有一个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 中,使用 CPack 我想CPACK_PACKAGE_FILE_NAME包含-debug后缀,以防包是从调试配置生成的。对于单配置 CMake 生成器,这可能可以通过检查来实现CMAKE_BUILD_TYPE,但这不适用于 Visual Studio 等多配置生成器。
我有一个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_MINOR和CPACK_PACKAGE_VERSION_PATCH变量(或许还有内部CPACK_PACKAGE_VERSION变量),其中设置版本为所有生成的软件包.
有没有办法设置每个组件的包版本,例如通过设置一些变量与其他变量CPACK_COMPONENT_<COMPONENT>_*或CPACK_DEBIAN_<COMPONENT>_*变量类似?
我正在尝试使用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 打包的新手,我相信这是一个相当基本的问题,但我很尴尬地说我已经在 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} 脚本中手动管理服务?