Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cmake CPack NSIS,为Windows生成安装程序_Cmake_Nsis_Cpack - Fatal编程技术网

Cmake CPack NSIS,为Windows生成安装程序

Cmake CPack NSIS,为Windows生成安装程序,cmake,nsis,cpack,Cmake,Nsis,Cpack,我试图在VS项目中运行数据包生成器,它在编译时崩溃,因为在安装目标和文件时使用了绝对路径 ABSOLUTE path INSTALL DESTINATION forbidden (by caller): ... 我检查了两次,所有安装目录都是相对的。我将相当多的变量设置为${PROJECT_BINARY_DIR}(应该是相对的)的子文件夹,例如: CMAKE/CPACK是否将这些变量解释为绝对路径? 如果是这样的话,有没有一种方法可以使CPack与这些变量一起正常工作? 当涉及次相对路径时,

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

 ABSOLUTE path INSTALL DESTINATION forbidden (by caller): ...
我检查了两次,所有安装目录都是相对的。我将相当多的变量设置为${PROJECT_BINARY_DIR}(应该是相对的)的子文件夹,例如:

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


谢谢

好的,我明白了,${PROJECT\u BINARY\u DIR}被解释为一个绝对路径,从那里它的所有子文件夹都将被拒绝

为了避免这个问题,我在if-else块中包围了install变量,如果是打包,则将使用相对文件夹,如下所示:

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版本上使用更好的函数


ciao

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

INSTALL (TARGET myApp DESTINATION ${SOME_INSTALL_PATH}/bin )
如果在生成cmake缓存时为
SOME\u INSTALL\u PATH
指定了绝对路径,则会在绝对安装目标上产生
cmake\u ERROR\u
错误,这会给您发出
消息“绝对路径安装目标禁止(由调用方)”

要解决此问题,请始终使用相对路径进行安装
DESTINATION
,或仅将包前缀指定给
某些\u INSTALL\u path
变量

以下是指向
INSTALL
命令的链接,以供参考。

在CMake邮件列表上也有类似的问题。

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