【问题标题】:cpack cmake windows "ABSOLUTE path INSTALL DESTINATION forbidden"cpack cmake windows“禁止绝对路径安装目标”
【发布时间】:2017-12-11 09:39:17
【问题描述】:

我正在尝试将 cpack 与 cmake 和 nsis 一起使用来生成一个安装程序,它将生成的 .exe 文件添加到环境变量中。

我有一个主 cmakelist.txt

我在其中添加带有add_subdirectory( 的子目录,每个子目录都有一个cmakelist.txt。

现在我在最后的主子目录中添加了:

SET(CPACK_NSIS_MODIFY_PATH ON) SET(CPACK_ERROR_ON_ABSOLUTE_INSTALL_DESTINATION OFF) INCLUDE(CPack)

并在每个“子”cmakelist.txt 我补充说: SET(CPACK_ERROR_ON_ABSOLUTE_INSTALL_DESTINATION OFF) INCLUDE(CPack)

我有这个错误:

CPack:使用 NSIS 创建包 CPack:安装项目 CPack: - 安装项目: MIALSRTK D 处的 CMake 错误:... ABSOLUTE path INSTALL DESTINATION 禁止(由调用者):

(这就是我尝试的原因:SET(CPACK_ERROR_ON_ABSOLUTE_INSTALL_DESTINATION OFF) 但它没有改变任何东西)。 我也尝试以管理员身份运行。

我也在这里尝试了解决方案:CPack NSIS, generate installer for Windows

但是 if(pack) 似乎不起作用。它进入 else(pack) 部分(我使用命令消息查看它的去向)。

您对如何解决这个问题有任何想法吗?

【问题讨论】:

    标签: cmake nsis cpack


    【解决方案1】:

    将变量 CPACK_ERROR_ON_ABSOLUTE_INSTALL_DESTINATION 设置为 OFF 不能禁用对 NSIS CPack 生成器的检查:

    一些 CPack 生成器,如 NSIS,在内部强制执行此操作。

    使用 NSIS 生成器,除了使用相对安装路径之外别无他法。


    只有将pack 变量显式 传递给cmake,构造if(pack) 才会起作用。 CMakeLists.txt 没有隐含的方式来检测它是否在 CPack 下运行。

    【讨论】:

    • 好的,我在主 cmakelist.txt 中添加了 SET(Pack True CACHE BOOL "Use CPACK") ,至少它进入了良好的 if 语句。但是目的地还是不好。它不会进入 bin 目录 IF(Pack) message("i am here") INSTALL(TARGETS mialsrtkRefineHRMaskByIntersection DESTINATION bin) ELSE(Pack) message("I should not be here") INSTALL(TARGETS mialsrtkRefineHRMaskByIntersection DESTINATION ${CMAKE_INSTALL_PREFIX} /bin) ENDIF(包)
    • but the destination is still not good 是什么意思?错误“禁止绝对路径安装目的地”是否仍然存在?还是什么?
    • 不再是 .exe 文件不在想要的目录中。 (我希望所有 .exe 都放在一个名为 bin 的目录中,在我调用 cmake 和 cpack 的构建文件夹中。当我在“不带 cpack 的 cmake”模式下使用虚拟工作室构建安装时有效。但当我使用cpack。我使用pack = true进行cmake .,配置和生成。所以“目标bin”。我在Visual Studio中构建整个项目。在运行安装(并且.exe​​不在bin / test中)。然后当我运行cpack . , cpack 正在寻找虚拟工作室默认制作的release文件夹中的exe
    • DESTINATION 选项中的相对路径计入目录,包含在 CMAKE_INSTALL_PREFIX 变量中,可由用户调整。在这个目录下安装东西是一种很好的风格,与在 build 目录下安装相反。 (顺便说一句,在 build step 之后你已经有了 build 目录下的程序,为什么你需要 install 那里?)。
    • 是的,我希望 .exe 进入 cmake_install_prefix/bin。在不使用 cpack 的情况下使用 INSTALL(TARGETS mialsrtkRefineHRMaskByIntersection DESTINATION ${CMAKE_INSTALL_PREFIX}/bin) 可以正常工作。并且 INSTALL(TARGETS mialsrtkRefineHRMaskByIntersection DESTINATION bin) 在使用 cpack 时不会重现相同的内容。在构建步骤之后,我在使用 cpack 时拥有的所有 .exe 都在 build/Toolbox_subdirectory/Release 我希望将它们全部放在 /build/bin 中,以便使用 cmake 命令将 /build/bin 添加到环境路径 SET(CPACK_NSIS_MODIFY_PATH ON)(不知道具体怎么做)
    猜你喜欢
    • 2011-10-06
    • 1970-01-01
    • 1970-01-01
    • 2011-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-29
    • 1970-01-01
    相关资源
    最近更新 更多