21

我对 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

我要做的是:使用 打包一个 Debian 包fakeroot make package,当包由sudo dpkg -i MyProgramPackageName安装时,将其安装到/usr/local,并带有一个子目录MyProgramPackageName。也就是说,所有文件都应该安装在/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)

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

请给我提意见。

彼得

4

2 回答 2

15

我没有找到任何文档来支持这一点,但我确实找到了一些错误报告和电子邮件档案,似乎表明您应该执行以下操作:

set(CPACK_SET_DESTDIR true)
set(CPACK_INSTALL_PREFIX /opt/MySuperAwesomePrefix-v.1.2.3)

如果未设置 CPACK_INSTALL_PREFIX,则默认为 CMAKE_INSTALL_PREFIX。现在,相对路径install(... DESTINATION dest)将在您的包文件中以 CPACK_INSTALL_PREFIX/dest 结尾。这在我尝试生成 deb 文件时有效。

于 2011-09-09T14:19:23.430 回答
1

CPACK 使用的路径取自 CMakeLists.txt 文件中的 INSTALL 指令。这允许结果包反映“make install”会做什么。这将 CPACK 配置保持在最低限度。

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

INSTALL(TARGETS ${APPLICATION} DESTINATION bin)

这将安装到 /usr/bin 或 /usr/local/bin。如果你想把它放在一个子目录中,你可以在这里做:

INSTALL(TARGETS ${APPLICATION} DESTINATION bin/myappdir)

或完全不同的目录:

INSTALL(TARGETS ${APPLICATION} DESTINATION /opt/foo/bar)
于 2011-08-29T15:13:32.703 回答