gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 11:06:48 26 4
gpt4 key购买 nike

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

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

我无法设置INSTALL_ROOT *.pro 中有这样的东西文件

isEmpty(INSTALL_ROOT) {
INSTALL_ROOT=/usr
}

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

INSTALL_ROOT=$HOME make install

当调用 make 时,这很好。但是我希望能够指定默认安装根目录,例如 /usr 。我可以引入一个新变量 PREFIX按照建议here 。然后生成的规则将如下所示(如果 PREFIX 设置为 /usr )

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

但是

INSTALL_ROOT=$HOME make install

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

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

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 的输出:

sez@ubuntu-11.10:~$ 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 - 和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 文件中定义默认安装的位置。

关于qt - 如何利用生成的 Makefile 中的 INSTALL_ROOT?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8360609/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com