【问题标题】:How do I include a json file in the output build of QT Project如何在 QT Project 的输出构建中包含 json 文件
【发布时间】:2014-03-11 01:31:32
【问题描述】:

我是 QT Creator 的新手。我在我的 QT C++ 项目中添加了一个 .json 文件和几个 .txt 文件,我可以在我的项目窗口中看到这些文件。当我清理、运行 qmake 然后构建所有文件时,我希望将这些文件复制到我的输出目录中,但它们不存在。我检查了我的 .pro 文件,我确实有条目

OTHER_FILES += \ MyJsonFile.json \ 我的文本文件.txt \ 自述文件.txt (注意:每个文件名单独一行)

当我进行构建时,如何将这些文件复制到我的输出目录?我希望程序一启动就可以访问它们。我在 QT 文档中看到它说您可以添加新 > 常规 > 文本文件,但文档只说您可以在项目窗口中看到该文件。他们没有解释如何让他们复制到您的构建中,我在任何地方都找不到答案。我在 Windows 7 机器上使用基于 QT 5.2.1 的 QT Creator 3.0.1。感谢您的指导。

编辑:附注我希望我可以将 json 和文本文件保留在应用程序之外,以便我可以在运行时或在程序执行之间更改文件中的值,并让项目在启动时提取新值。

【问题讨论】:

  • 我有点生疏了,但是您是否需要以某种方式将 OTHER_FILES 列表添加到 DEPLOYMENT 中?
  • 是的,“不知何故”是我正在寻找的。我知道在 Eclipse、Visual Studio 和其他 IDE 中,您可以执行“包含在构建中”或“复制到输出目录”等操作,但我在 QT Creator 中看不到这样做的方法。我现在几乎对makefile一无所知,并且认为将txt文件复制到您的构建目录不应该如此困难。或者是吗?谢谢!
  • .pro 文件描述的项目的构建过程与 Qt Creator 无关。这是一个两阶段的过程:首先由 qmake 生成 makefile,然后由 make 工具完成构建。

标签: c++ qt qt5 qmake


【解决方案1】:

构建和安装目录是不同的概念。如果您只是构建,则不应期望实际安装任何东西。

在 Qt Creator 中,当您有一个基于 qmake 的项目时,默认构建设置会调用 make。要安装,您需要调用make install。这可以作为额外的构建步骤添加到项目的“构建和运行”选项卡中。

使用qmake,安装目录没有默认位置,也没有声明要安装的对象,所以make install默认是空操作。

需要安装的文件是:

  1. 设置为 qmake 对象。
  2. 必须将对象添加到INSTALLS 变量中。

例如:

# Sets the default installation prefix to the build directory.
# This is the same default that Qt's configuration process uses.
!defined(PREFIX,var): PREFIX = $$OUT_PWD

MY_RESOURCES = \
  MyJsonFile.json \
  MyTxtFile.txt \
  ReadMe.txt

OTHER_SOURCES += $$MY_RESOURCES

# Object describing the resources to install
my_resources.path = $$PREFIX/share/myproject
my_resources.files = $$MY_RESOURCES

# The automatically generated object describing the target.
target.path = $$PREFIX/bin/myproject

# Declare my_resources and target objects to be installed.
INSTALLS += my_resources target

用户或包管理器脚本应该提供 qmake 所需的安装前缀。一个完整的构建完成 一个空的构建目录(所谓的影子构建)看起来像:

# on Unix
qmake "PREFIX=/usr/local" /sourcedir/myproject.pro
# on Windows (the installation into Program Files won't
# be done by make, but by an installer!)
qmake /sourcedir/myproject.pro
make
make install

【讨论】:

  • 感谢 Kuba 的解释,但它为时过早,有点超出我的想象。有没有什么地方我可以读到如何使用make。当我构建时,我得到一个文件夹,其中包含三个名为 Makefile、Makefile.Debug 和 Makefile.Release 的文件。在名为 debug 和 release 的内部还有另外两个文件夹。这只是构建还是安装?有没有办法在我进行构建时复制文件,这样我就不必继续手动移动它了?我的程序需要在运行时读取该文件。
  • @Shawn:您在构建之后获得的文件夹是在make 调用之后完成的构建文件夹。您需要从该文件夹手动运行make install,或者让Qt Creator 添加它。转到窗口左侧的“项目”窗格,在顶部查找项目的选项卡,选择“构建并运行”子选项卡,然后添加一个额外的构建步骤,并以 install 作为唯一参数。然后,您将在那里获得binshare 文件夹(因为前缀只是构建文件夹)。您可以将前缀参数提供给 qmake,以便它安装在其他地方(比如在 $HOME 中)。
  • 我会试试这个。非常感谢 Kuba Ober 详细列出步骤!我仍然可以使用安装步骤进行调试吗?
  • 最后一个问题 Kuba Ober,这是自定义构建步骤吗?我是否键入“make”作为命令并键入“install”作为参数?谢谢
  • 您可以简单地将其作为“制作”构建步骤,当然自定义也可以。调试已安装的二进制文件需要您在“运行”选项卡中选择正确的二进制文件。 Qt Creator 默认会调试已构建的二进制文件,而不是已安装的。
【解决方案2】:

我认为您需要使用资源文件。只需创建一个资源文件并将您的文件添加到其中。当您构建您的应用程序时,您将始终在可执行文件中拥有这些文件。 老实说,我不知道如何使用 QtCreator,因为我一直使用 eclipse 和插件。我可以建议阅读一篇文章:Managing Resources

编辑 在我回答之后,OP 告诉我这些文件将在运行时更改。所以我的回答显然不是他想要的。有人可以告诉我如何处理这个答案吗?谢谢。

【讨论】:

  • 我真的希望不要将文件编译到应用程序中,以便我可以在运行时更改 json 中的值。谢谢你的文章。我一定会读一读。
  • ehm..这不是一个小细节。资源文件用于静态文件.. 不会经常更改的东西。请说明您必须做什么,我们可以提供帮助..
  • 我很抱歉。我在 QT 上上了一门速成课程,却忘了添加那块拼图。基本上,我只想要一个复制到构建目录的 json 文件。就这样。一旦程序启动,我正在读取该文件,但我希望能够在运行它之前更改文件中的一些值,并让我的程序在每次连续加载时读取这些更改。
  • Andrea.marangoni,你的回答很有帮助,我也许可以用它来解决我遇到的不同问题。
猜你喜欢
  • 2022-12-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-12
  • 2019-12-16
  • 2020-03-11
  • 1970-01-01
相关资源
最近更新 更多