如何利用生成的 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? 的相关文章

  • 在 Windows 上以 QML 播放 RTSP 视频

    我正在尝试将 QML 中的 RTSP 流播放到视频标签中 如下所示 Repeater model 8 Video Layout fillWidth true Layout fillHeight true fillMode VideoOutp
  • 在信号/槽处理期间删除 QObject

    我知道从槽处理中删除 QObject 可能会使应用程序崩溃 因为它可能有其他排队的事件 因此 我将使用 obj gt deleteLater 而不是使用 delete obj 据我所知 obj 等待处理所有排队的事件 然后 删除 obj Q
  • 如何使用bind将成员函数作为函数指针传递?

    我试图将成员函数作为函数指针传递 这样我就不需要依赖单例或全局函数来处理 Qt 5 中的 Qt 消息 据我所知 我的 std function 是正确的类型 它具有正确的签名 并且绑定应该允许我插入隐式this指针 本质上是将成员函数传递为
  • Qt - 意外的 GDB 退出

    我正在尝试开发一个应用程序 该应用程序创建图像并使用双线性插值填充颜色像素 然后显示它 到目前为止我的代码如下 include
  • Qt:关闭期间线程仍在运行时 qthread 被销毁

    我有一堂课 class centralDataPool public QObject Q OBJECT public centralDataPool QObject parent 0 centralDataPool commMonitor
  • QtWebEngine Quicknano 在嵌入式 Linux 中没有声音

    我已将 QtWebEngine 编译到我的 i MX6 嵌入式设备中 当我尝试使用 Quicknanobrowser 播放 YouTube 视频时 视频会播放 但没有声音 事实上 当我尝试播放音频文件时没有声音hpr dogphilosop
  • 在 Windows 上静默安装 Qt55 Enterprise

    编辑 在 Qt 支持的帮助下 我已经解决了如何自动化 Qt 企业安装程序的这两个部分 下面是脚本调用 我正在尝试在 Windows 8 1 和 Windows 10 上静默安装 Qt 5 5 1 Enterprise 使用 script 开
  • QWebView等待加载

    bool MainWindow waitForLoad QWebView view QEventLoop loopLoad QTimer timer QObject connect view SIGNAL loadFinished bool
  • 如何使用样式表删除 QWizard 中的水平线?

    我正在研究一个样式表QWizard我想删除按钮上方的水平线 我已经发布了一个最小的例子here https stackoverflow com q 52538669 8570451 这个问题是由scopchanov从最小的例子中解决的 但是
  • 如何从 ffmpeg 中打开的文件获取流信息?

    我正在尝试使用 ffmpeg 读取视频文件 我有与其旧版本相对应的工作代码 并开始尝试升级到最新的构建版本 将所有这些已弃用的函数替换为其实际的类似函数 但是我遇到了问题 似乎没有检索到任何流 并且视频负载停止在轨道中 这是我正在使用的代码
  • 如何改善 Qt5 程序的启动时间?

    我最近切换到 Qt5 我注意到与 Qt4 相比 初始化 QApplication 花费的时间明显更长 大约几分钟 仔细一看 程序似乎把时间花在了这里 Qt5Guid dll QGlobalStatic
  • Qt - 等待 Qprocess 完成

    我正在使用 CMDQProcess但我有一个问题 My code QProcess process process start cmd exe process write del f b txt n r process waitForFin
  • 隐藏 QLineEdit 闪烁光标

    我正在开发 QT v5 2 我需要隐藏闪烁的光标 插入符号 QLineEdit永久 但与此同时 我想要QLineEdit可编辑 因此 readOnly 和 或设置 editable false 对我来说不是一个选项 我已经改变了背景颜色QL
  • 关于在 Qt 中使用未记录的类

    使用无证文件是否安全QObjectUserData类和QObject setUserData in Qt 相反 你可以看看使用QObject setProperty http doc qt io qt 5 qobject html setP
  • 带 Qt 的菜单栏/系统托盘应用程序

    我是 Qt PyQt 的新手 我正在尝试制作一个应用程序 其功能将从菜单栏 系统托盘执行 这里展示了一个完美的例子 我找不到关于如何做到这一点的好资源 有人可以建议吗 Thanks 我认为您正在寻找与QMenu and QMainWindo
  • Qt 5.5 QOpenGLWidget 链接错误未链接任何 openGL 调用

    我尝试使用 Qt 5 5 1 构建一个简单的 OpenGL 应用程序 一切都很好 直到我尝试使用 glClearColor 等 openGL 本机函数调用 该小部件实际上编译并产生黑屏 但在我尝试使用任何 openGL 本机函数后 它甚至不
  • 具有多个父项的 Qt 树模型

    我想构建一棵树 其中一个元素可以引用另一个元素 我想要构建的树是 像这样的东西 A B C D E F P this is a pointer to C D first child of C E second child of C I fo
  • SWI-Prolog 与 C++ 接口的问题

    我试图让 SWI Prolog 与 C 很好地配合 现在束手无策 现在 在我开始准确解释我的问题是什么之前 我想首先说明我的项目是关于什么的以及我选择了哪些工具来开发解决方案 我的教授分配给我的任务是开发一个 GUI 程序 作为 SWI p
  • 如何从浮点数组创建新的 QImage

    我有一个代表图像的浮点数数组 列在前 我想在 QGraphicsSecene 上将图像显示为 QPixmap 为了做到这一点 我尝试使用 QImage 构造函数 QImage const uchar data int width int h
  • PyQt - 如何从给定的小部件获取顶级父级?

    给定的小部件如何访问它最旧的父级 即顶级小部件 我需要 showMinimized it 现在我正在使用 self parent parent parent showMinimized 但这似乎不是最好的方法 如果它移动了 我需要手动更改父

随机推荐