如何利用生成的 Makefile 中的 INSTALL_ROOT?

2024-01-01

qmake生成以下(以及其他)用于安装目标的规则:

-$(INSTALL_PROGRAM) "$(TARGET)" "$(INSTALL_ROOT)/$(TARGET)"

我无法设置INSTALL_ROOT像这样的东西*.pro file

isEmpty(INSTALL_ROOT) {
    INSTALL_ROOT=/usr
}

because INSTALL_ROOT在某种程度上对于生成的 Makefile 来说是本地的。据我目前了解到的情况INSTALL_ROOT默认为空。它可以像这样使用

INSTALL_ROOT=$HOME make install

当调用 make 时,这很好。不过我希望能够指定default安装根目录,说/usr。我可以引入一个新变量PREFIX按照建议here https://stackoverflow.com/questions/7106442/qt-project-files-and-prefix-variable。 然后生成的规则将如下所示(如果PREFIX被设置为/usr)

-$(INSTALL_PROGRAM) "$(TARGET)" "$(INSTALL_ROOT)/usr/$(TARGET)"

however

INSTALL_ROOT=$HOME make install

将目标安装到/home/<user_name>/usr/$(TARGET)这并不是人们所期望的。

所以设置INSTALL_ROOT某些默认值会产生一致的行为,这优于添加PREFIX,但是如何设置INSTALL_ROOT in a *.pro file?

目的是什么INSTALL_ROOT它到底应该被使用吗?


INSTALL_ROOT 用于包构建系统,例如 NSIS、debian 或任何其他用于打包构建软件并交付它的方式。

为此,您想要的结果是

INSTALL_ROOT=$PWD/package_root make install

在 $PWD/package_root 下创建一棵树,该树完全模仿您计划交付到的目标系统上的树。请注意,您需要 INSTALL_ROOT 成为完整路径(因此是 $PWD),而不是相对路径。

创建包时,您可以将该树压缩到存档中,然后安装过程只需将同一棵树解压缩到目标文件系统上。

$PWD/package_root/usr/bin/my_binary

将被安装到

/usr/bin/my_binary

在目标上。

这就是 INSTALL_ROOT 用途问题的答案。要回答如何指定“默认安装根目录”需要有关您想要实现的目标的更多信息。

看一下 qmake -query 的输出:

[email protected] /cdn-cgi/l/email-protection:~$ qmake -query
QT_INSTALL_PREFIX:/usr
QT_INSTALL_DATA:/usr/share/qt4
QT_INSTALL_DOCS:/usr/share/qt4/doc
QT_INSTALL_HEADERS:/usr/include/qt4
QT_INSTALL_LIBS:/usr/lib/i386-linux-gnu
QT_INSTALL_BINS:/usr/bin
<snipped>
QT_VERSION:4.7.4

以及 qmake 中 INSTALLS 变量的使用:http://doc.qt.digia.com/qt/qmake-environment-reference.html#installs http://doc.qt.digia.com/qt/qmake-environment-reference.html#installs - and 如何指定输入 QMake INSTALLS 变量? https://stackoverflow.com/questions/9377593/how-do-i-specify-input-the-qmake-installs-variable

默认情况下,如果你这样做

target.path = $$[QT_INSTALL_BINS]
INSTALLS += target

然后你的二进制文件将被安装在 qt 认为正确的地方,QT_INSTALL_BINS。当然,您可以通过将 target.path 设置为其他内容来更改这些默认值。 Qt 提供了这些路径,但是否使用它们取决于您。

你可以做

MY_DEFAULT_INSTALL=/opt/myproj

somedocs.files = docs/index.html
somedocs.path = $$MY_DEFAULT_INSTALL/docs

target.path = $$MY_DEFAULT_INSTALL/bin

INSTALLS += somedocs target

例如,其中 MY_DEFAULT_INSTALL 是 .pro 文件中定义安装默认值的一个位置。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何利用生成的 Makefile 中的 INSTALL_ROOT? 的相关文章

随机推荐