CMake-CPack包装安装路径梦魇

时间:2011-07-15 19:07:06

标签: path install cmake debian 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

我要做的是:使用fakeroot make package打包Debian软件包,当软件包由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?因为关于这个变量的文档描述非常有吸引力,而且它确实是我想要的,但我无法让它工作。

请告诉我。

彼得

2 个答案:

答案 0 :(得分:13)

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

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文件时,这有效。

答案 1 :(得分: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)