【问题标题】:CMake-CPack Package Installation Path NightmareCMake-CPack包安装路径噩梦
【发布时间】:2011-10-06 10:06:48
【问题描述】:

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?因为关于这个变量的文档描述真的很吸引人,这确实是我想要的,但我就是无法让它工作。

请给我建议。

彼得

【问题讨论】:

    标签: path installation cmake debian cpack


    【解决方案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)
    

    【讨论】:

    • 我很困惑。我正在使用 CPACK 对其进行打包,以便它将应用程序安装到我想要的位置。在INSTALL 指令中,我总是将文件夹或文件安装到INSTALL_PREFIX/DIRECTORY 的相对路径中。
    • 您只需要安装目标中的相对路径 - 它会自动相对于 CMAKE_INSTALL_PREFIX 安装,无需指定。指定绝对路径是让所有这些安装内容搞砸的便捷方式。
    【解决方案2】:

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

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

    【讨论】:

    • 下周一我会试试你的建议,然后告诉你结果。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-06
    • 2016-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多