Path CMake CPack包安装路径噩梦

Path CMake CPack包安装路径噩梦,path,installation,cmake,debian,cpack,Path,Installation,Cmake,Debian,Cpack,我对CMake公司的做法感到失望已经快一个星期了 糟糕的是CMake CPack在线文档没有很好地记录这一部分 在谷歌搜索之后,我找到了以下变量: CPACK_PACKAGING_PREFIX # NOT documented CMAKE_INSTALL_PREFIX # Documented, but the behavior seems weird CPACK_INSTALL_PREFIX # NOT documented CPA

我对CMake公司的做法感到失望已经快一个星期了

糟糕的是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\u PACKAGE\u INSTALL\u目录
?因为关于这个变量的文档描述非常吸引人,这正是我想要的,但我就是不能让它工作

请告诉我


Peter

CPACK使用的路径取自CMakeLists.txt文件中的安装指令。这允许结果包镜像“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)

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

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\u install\u PREFIX/dest结束。当我试图生成一个deb文件时,这就起作用了。

我很困惑。我正在使用CPACK对其进行打包,以便它将应用程序安装到我想要的位置。在
INSTALL
指令中,我始终将文件夹或文件安装到安装前缀/目录的相对路径。您只需要安装目标中的相对路径-它将自动安装到相对于CMAKE\u安装前缀的位置,无需指定。指定一个绝对路径是一种方便的方法,可以让所有这些安装工作都搞砸。我将在下周一尝试你的建议,并让你知道结果。谢谢。剧透警报:它仍然不起作用!