NSIS做的安装包为啥路径总是C盘呢?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了NSIS做的安装包为啥路径总是C盘呢?相关的知识,希望对你有一定的参考价值。

用NSIS做的安装包的路径总是默认在C盘呢?

参考技术A 你安装时 自己修改一下默认路径追问

这还用你说啊。

你不明白我的意思是不需要选就默认是某个盘么?

本回答被提问者采纳

CPack NSIS,为 Windows 生成安装程序

【中文标题】CPack NSIS,为 Windows 生成安装程序【英文标题】:CPack NSIS, generate installer for Windows 【发布时间】:2014-05-12 15:57:00 【问题描述】:

我正在尝试在 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?

谢谢

【问题讨论】:

【参考方案1】:

好的,我明白了,$PROJECT_BINARY_DIR 被解释为绝对路径,从那里它的所有子文件夹都将被拒绝。

为了避免这个问题,我把安装变量包围在 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版本有更好的功能。

淅淅

【讨论】:

【参考方案2】:

这个致命错误是为了告诉您安装根目录应该在用户执行安装程序时指定。我猜你的 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

【讨论】:

以上是关于NSIS做的安装包为啥路径总是C盘呢?的主要内容,如果未能解决你的问题,请参考以下文章

Visual Studio 2013安装路径为啥我选择不再C盘,它还装在C盘,怎么处理

安装程序出现NSIS ERROR

electron 打包,NSIS修改默认安装路径

NSIS安装包开发笔记:NSIS使用NSIS+Qt界面制作安装包流程

NSIS安装包开发笔记:NSIS使用NSIS+Qt界面制作安装包流程

NSIS安装包开发笔记:NSIS介绍使用NSIS默认向导脚本制作Windows安装包