2011-07-15 50 views
13

我一直对CMake-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,当包由sudo dpkg -i MyProgramPackageName安装Debian软件包,将其安装到/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?因为关于这个变量的文档描述非常有吸引力,而且它确实是我想要的,但我无法让它工作。

请告诉我。

彼得

回答

0

由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) 
+0

我很困惑。我正在使用CPACK将其打包,以便将应用程序安装到我想要的位置。在'INSTALL'指令中,我总是将一个或多个文件夹安装到INSTALL_PREFIX/DIRECTORY的相对路径中。 –

+2

您只需要安装目标中的相对路径 - 它将自动相对于CMAKE_INSTALL_PREFIX进行安装,无需指定。指定绝对路径是将所有这些安装的东西弄糟的便捷方式。 –

9

我没有找到任何文件来支持这一点,但我确实发现了一些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_INSTALL_PREFIX/dest结尾。这工作时,我试图生成一个deb文件。

+0

我会在下周一尝试你的建议,并让你知道结果。谢谢。 –

+2

为我工作,谢谢。 – usr1234567