【问题标题】:QML dir not in releaseQML 目录未发布
【发布时间】:2017-03-08 15:29:28
【问题描述】:

我有一个这样的项目结构:

project
-project.pro (subdirs)
|-app
| |-app.pro (app)
| |-QML
| |-CPP
| |-ICONS
|
|-lib
  |-lib.pro (subdirs, copied from qtvirtualkeyboard/src)
  |-config.pri (copied from qtvirtualkeyboard/src)
  |-virtualkeyboard
    |-...

lib-dir 等于 qtvirtualkeyboard/src,只是将目录和项目从 src 重命名为 lib

现在,当我在 QtCreator 中单击运行时,一切运行正常
但是我想用windeployqt 部署它,问题是QML-dir 没有复制到release-dir。

当我部署它时(make install 后跟windeployqt),我得到了文件结构:

project
|-.moc
|-.obj
|-.pch
|-.rcc
|-debug
|-QML <-- This should not be here, but a subdir of release
|-release
  |-app.exe
  |-...otherstuff

我认为这可能是(我的错).qmake.conf 的错,我不明白并从qtvirtualkeyboard 复制过来

.qmake.conf:

load(qt_build_config)
MODULE_VERSION = 5.8.1

.qmake.stash:

QMAKE_DEFAULT_INCDIRS = \
    D:/Qt/Qt5.7.0/Tools/mingw530_32/lib/gcc/i686-w64-mingw32/5.3.0/include \
    D:/Qt/Qt5.7.0/Tools/mingw530_32/lib/gcc/i686-w64-mingw32/5.3.0/include-fixed \
    D:/Qt/Qt5.7.0/Tools/mingw530_32/i686-w64-mingw32/include \
    D:/Qt/Qt5.7.0/Tools/mingw530_32/i686-w64-mingw32/include/c++ \
    D:/Qt/Qt5.7.0/Tools/mingw530_32/i686-w64-mingw32/include/c++/i686-w64-mingw32 \
    D:/Qt/Qt5.7.0/Tools/mingw530_32/i686-w64-mingw32/include/c++/backward
QMAKE_DEFAULT_LIBDIRS = \
    D:/Qt/Qt5.7.0/Tools/mingw530_32/lib/gcc/i686-w64-mingw32/5.3.0 \
    D:/Qt/Qt5.7.0/Tools/mingw530_32/lib/gcc \
    D:/Qt/Qt5.7.0/Tools/mingw530_32/i686-w64-mingw32/lib \
    D:/Qt/Qt5.7.0/Tools/mingw530_32/lib

或者一个项目文件,其中一个lib.pro 是直接从存储库复制的,而app.pro 本身运行良好,然后我将其重新定位为project.pro 的子项目。

(编辑)app.pro

TEMPLATE = app
QT += qml quick
CONFIG += c++11 \
          disable-desktop

SOURCES += main.cpp \
           ...

RESOURCES += \
    ICONS\ICONS.qrc

QML_IMPORT_PATH =

include(deployment.pri)

DISTFILES += \
    QML/...
    ...

HEADERS += \
    CPP/...
    ...

qmlsrc.files = QML/*
qmlsrc.path = $$OUT_PWD/QML

INSTALLS += qmlsrc

除了添加 自定义部署步骤 来复制 QML-dir 之外,我该如何解决这个问题?根据@KevinKrammer 的回答,我认为问题出在:qmlsrc.path = $$OUT_PWD/QMLOUT_PWD 包含生成 Makefile 的路径。没错,如果我只运行app.pro,但是当我运行project.pro 时它应该等同于$$OUT_PWD/[debug,relase,...]/QML 所以$$PATH_TO_THE_EXE/QML
有没有一种方法可以通用地编写它,它在两种情况下都有效:当我运行project.pro 和当我运行app.pro 以及releasedebug 时,模式?

【问题讨论】:

  • 我已经编辑了我的答案以建议调试/发布差异处理的选项

标签: qt qml qt-creator qmake


【解决方案1】:

您可以指定文件,甚至使用通配符模式,作为additional 安装目标,类似于

qmlfiles.files = QML/*
qmlfiles.path = $$OUT_PWD/QML

INSTALLS += qmlfiles

调试/发布差异可以通过两种方式处理

debug:qmlfiles.path = $$OUT_PWD/debug/QML
release:qmlfiles.path = $$OUT_PWD/release/QML

CONFIG(debug, debug|release) {
    qmlfiles.path = ...
} else {
    qmlfiles.path = ...
}

【讨论】:

    猜你喜欢
    • 2019-08-12
    • 2015-12-02
    • 2014-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-28
    • 1970-01-01
    相关资源
    最近更新 更多