是否可以在 postinst 中读取 CMAKE_INSTALL_PREFIX 变量的值?

Posted

技术标签:

【中文标题】是否可以在 postinst 中读取 CMAKE_INSTALL_PREFIX 变量的值?【英文标题】:Is it possible to read the value of CMAKE_INSTALL_PREFIX variable in postinst? 【发布时间】:2019-03-19 06:15:10 【问题描述】:

只是想问是否可以在postinst脚本中读取CMAKE_INSTALL_PREFIX变量的值?目标是让postinst 脚本读取$CMAKE_INSTALL_PREFIX/share/myapp 文件夹中的文件,并根据读取的文件内容在$CMAKE_INSTALL_PREFIX/etc/myapp 文件夹中生成文件。我想避免依赖绝对路径。

提前谢谢你!

编辑

postinst 调用env 提供了很好的信息:

DPKG_MAINTSCRIPT_DEBUG=0
DPKG_COLORS=never
DPKG_MAINTSCRIPT_NAME=postinst
DPKG_MAINTSCRIPT_PACKAGE=myapp
DPKG_RUNNING_VERSION=1.19.0.5
DPKG_FRONTEND_LOCKED=true
DPKG_ROOT=
DPKG_MAINTSCRIPT_ARCH=armhf
DPKG_ADMINDIR=/var/lib/dpkg
DPKG_MAINTSCRIPT_PACKAGE_REFCOUNT=1

DPKG_ROOT 可能是我需要的。看来CMAKE_INSTALL_PREFIXpostinst没有关系。

【问题讨论】:

【参考方案1】:

一般来说,在执行 postinst 时没有 CMake 变量(它们绝对不会出现在 env 输出中)。所以,做你想做的事情的方法是使用configure_file 函数生成你的postinst 脚本(来自postinst.in 文件)。在模板文件中,您可以引用 CMake 变量,因此渲染您的脚本将包含“硬编码”文字。这很正常。

但是,请考虑以下几点:

cpack 使用 CPACK_PACKAGING_INSTALL_PREFIX 变量

【讨论】:

以上是关于是否可以在 postinst 中读取 CMAKE_INSTALL_PREFIX 变量的值?的主要内容,如果未能解决你的问题,请参考以下文章

BitBake:如何使用 shell 脚本内容作为 pkg_postinst 或 pkg_preinst 函数的主体?

使用 CMake 压缩文件?

postinst 中的 db_input 不起作用

如何使用命令行dpkg选项解压缩conf并跳过postinst脚本

为啥调整应用程序的 postinst 脚本会导致应用程序图标消失?

安装软件后,在postinst中执行ldconfig无效?