QML 目录未发布
QML dir not in release
我有一个这样的项目结构:
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 目录之外,我该如何解决这个问题?根据 @KevinKrammer 的回答,我得出结论,问题在于:qmlsrc.path = $$OUT_PWD/QML
。 OUT_PWD
包含生成Makefile的路径。这是对的,如果我只运行app.pro
,但是当我运行project.pro
它应该相当于$$OUT_PWD/[debug,relase,...]/QML
所以$$PATH_TO_THE_EXE/QML
有没有办法以某种方式通用地编写它,它在两种情况下都有效:当我 运行 project.pro
和当我 运行 app.pro
并且在这两种情况下, release
和 debug
,模式?
您可以指定文件,甚至使用通配符模式,作为 additional 安装目标,类似于
qmlfiles.files = QML/*
qmlfiles.path = $$OUT_PWD/QML
INSTALLS += qmlfiles
debug/release 差异可以通过两种方式处理
debug:qmlfiles.path = $$OUT_PWD/debug/QML
release:qmlfiles.path = $$OUT_PWD/release/QML
或
CONFIG(debug, debug|release) {
qmlfiles.path = ...
} else {
qmlfiles.path = ...
}
我有一个这样的项目结构:
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 目录之外,我该如何解决这个问题?根据 @KevinKrammer 的回答,我得出结论,问题在于:qmlsrc.path = $$OUT_PWD/QML
。 OUT_PWD
包含生成Makefile的路径。这是对的,如果我只运行app.pro
,但是当我运行project.pro
它应该相当于$$OUT_PWD/[debug,relase,...]/QML
所以$$PATH_TO_THE_EXE/QML
有没有办法以某种方式通用地编写它,它在两种情况下都有效:当我 运行 project.pro
和当我 运行 app.pro
并且在这两种情况下, release
和 debug
,模式?
您可以指定文件,甚至使用通配符模式,作为 additional 安装目标,类似于
qmlfiles.files = QML/*
qmlfiles.path = $$OUT_PWD/QML
INSTALLS += qmlfiles
debug/release 差异可以通过两种方式处理
debug:qmlfiles.path = $$OUT_PWD/debug/QML
release:qmlfiles.path = $$OUT_PWD/release/QML
或
CONFIG(debug, debug|release) {
qmlfiles.path = ...
} else {
qmlfiles.path = ...
}