我对 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
? 因为关于这个变量的文档描述非常有吸引力,而且它确实是我想要的,但我就是无法让它工作。
请告诉我。
彼得
我没有找到任何文档来支持这一点,但我确实找到了一些错误报告和电子邮件档案,它们似乎表明您应该执行以下操作:
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 文件时,这有效。
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)
因此,当前的 cmake 3.31 CPACK_PACKAGING_INSTALL_PREFIX 适合我在 MacO 上使用(我还没有在 Linux 上检查过),例如:
set(CPACK_PACKAGING_INSTALL_PREFIX "/Users/Shared/Autodesk/ApplicationAddins/application-plugin-name")
正确放置我的包文件