CPack NSIS,为Windows生成安装程序

时间:2014-05-12 15:57:01

标签: cmake nsis cpack

我试图在VS项目中运行数据包生成器,它在编译时崩溃,因为从目标和文件安装时使用了绝对路径。

 ABSOLUTE path INSTALL DESTINATION forbidden (by caller): ...

我检查了两次,所有安装目录都是相对的。我设置了很多变量作为$ {PROJECT_BINARY_DIR}的子文件夹(应该是相对的),例如:

set(INSTALL_DIR ${PROJECT_BINARY_DIR}/bin)
set(LIB_DIR ${PROJECT_BINARY_DIR}/bin/lib)
set(EXT_DIR ${PROJECT_BINARY_DIR}/bin/ext)
...

CMAKE / CPACK是否将这些变量解释为绝对路径? 如果是这样,有没有办法让CPack与这些变量一起正常工作? 当涉及子相对路径时,如何使用CPack?

感谢

2 个答案:

答案 0 :(得分:1)

好的,我看到,$ {PROJECT_BINARY_DIR}被解释为ABSOLUTE路径,从那里它的所有子文件夹都将被拒绝。

为了避免这个问题,我在if else块中包含了安装变量,如果是打包的情况,那么将使用相关文件夹,如下所示:

if(PACK)
   set(INSTALL_DIR bin)
   set(LIB_DIR bin/lib)
   set(EXT_DIR /bin/ext)
   ...
else(PACK)
   set(INSTALL_DIR ${PROJECT_BINARY_DIR}/bin)
   set(LIB_DIR ${PROJECT_BINARY_DIR}/bin/lib)
   set(EXT_DIR ${PROJECT_BINARY_DIR}/bin/ext)
   ...
endif(PACK)

这解决了它,但它真的很脏,等待新的CPack版本更好的功能。

答案 1 :(得分:1)

此致命错误旨在告诉您应在用户执行安装程序时指定安装根目录。我想你的cmake配置中的某个地方可能有这样的代码:

INSTALL (TARGET myApp DESTINATION ${SOME_INSTALL_PATH}/bin )

如果在生成cmake缓存时为SOME_INSTALL_PATH分配绝对路径,则会出现CMAKE_ERROR_ON_ABSOLUTE_INSTALL_DESTINATION错误,该错误会为您提供"ABSOLUTE path INSTALL DESTINATION forbidden (by caller)"消息。

要解决此问题,请始终使用安装DESTINATION的相对路径,或仅将包前缀分配给SOME_INSTALL_PATH变量。

供参考,以下是INSTALL命令的链接。 http://www.cmake.org/cmake/help/v3.0/variable/CMAKE_ERROR_ON_ABSOLUTE_INSTALL_DESTINATION.html

在CMake邮件列表上也有类似的问题。 http://public.kitware.com/pipermail/cmake/2013-May/054656.html