CMake-CPack包装安装路径梦魇

Pet*_*Lee 18 debian install path cmake cpack

我已经被CMake-CPack感到沮丧了将近一周.

不好的是CMake-CPack在线文档没有很好地记录这部分内容.

谷歌搜索后,我发现这个变量使用:

CPACK_PACKAGING_PREFIX          # NOT documented
CMAKE_INSTALL_PREFIX            # Documented, but the behavior seems weird
CPACK_INSTALL_PREFIX            # NOT documented
CPACK_PACKAGE_INSTALL_DIRECTORY # Documented, but this variable does NOT work as the online document described
CPACK_PACKAGING_INSTALL_PREFIX  # NOT documented
Run Code Online (Sandbox Code Playgroud)

我想要做的是:打包Debian软件包fakeroot make package,当安装软件包时,使用子目录sudo dpkg -i MyProgramPackageName安装它.也就是说,应该安装所有文件./usr/localMyProgramPackageName/usr/local/MyProgramPackageName-V.1.2.3

我一直在尝试(CMake 2.8.3和CMake 2.8.5)来调整这些变量.我尝试了很多组合,但都失败了.

唯一成功的方法是:

Set(CPACK_PACKAGING_INSTALL_PREFIX /usr/local/MyProgramPackageName-V.1.2.3)
Run Code Online (Sandbox Code Playgroud)

但是这个变量甚至没有记录,并且无法保证行为.如果您对我的问题感到困惑,请告诉我何时使用CPACK_PACKAGE_INSTALL_DIRECTORY?因为关于这个变量的文档描述真的很有吸引力,而且它确实是我想要的,但我无法让它工作.

请建议我.

彼得

Dor*_*ran 14

我没有找到任何文档来支持这一点,但我确实发现了一些错误报告和电子邮件存档,似乎表明以下是您应该做的事情:

set(CPACK_SET_DESTDIR true)
set(CPACK_INSTALL_PREFIX /opt/MySuperAwesomePrefix-v.1.2.3)
Run Code Online (Sandbox Code Playgroud)

如果未设置CPACK_INSTALL_PREFIX,则默认为CMAKE_INSTALL_PREFIX.现在相对路径install(... DESTINATION dest)将最终作为包文件中的CPACK_INSTALL_PREFIX/dest.这在我尝试生成deb文件时起作用.


小智 2

CPACK 使用的路径取自 CMakeLists.txt 文件中的 INSTALL 指令。这允许结果包镜像“make install”将执行的操作。这使 CPACK 配置保持在最低限度。

因此,从示例 CMakeLists.txt 文件中:

INSTALL(TARGETS ${APPLICATION} DESTINATION bin)
Run Code Online (Sandbox Code Playgroud)

这将安装到 /usr/bin 或 /usr/local/bin。如果您想将其放在子目录中,可以在此处执行此操作:

INSTALL(TARGETS ${APPLICATION} DESTINATION bin/myappdir)
Run Code Online (Sandbox Code Playgroud)

或者完全不同的目录:

INSTALL(TARGETS ${APPLICATION} DESTINATION /opt/foo/bar)
Run Code Online (Sandbox Code Playgroud)

  • 您只需要安装目标中的相对路径 - 它将自动相对于 CMAKE_INSTALL_PREFIX 安装,无需指定。指定绝对路径是搞乱所有这些安装内容的便捷方法。 (3认同)