如何正确构建 Qt 插件

How to properly build Qt plugins

我有一个 Qt 项目:

TEMPLATE      = lib
CONFIG       += plugin static
QT           += widgets
INCLUDEPATH  += ../../app
HEADERS       = basictoolsplugin.h
SOURCES       = basictoolsplugin.cpp
TARGET        = $$qtLibraryTarget(pnp_basictools)
DESTDIR       = ../../plugins

# install
target.path = $$[QT_INSTALL_EXAMPLES]/widgets/tools/plugandpaint/plugins
INSTALLS += target

CONFIG += install_ok  # Do not cargo-cult this!
uikit: CONFIG += debug_and_release

它不是在源文件夹的上一级构建目录,而是将 build-basictools-Desktop_Qt_5_8_0_GCC_64bit-Debug 放入源文件夹。为什么要这样做?

还值得注意的是,我在构建后收到以下消息警告:

:-1: warning: The build directory needs to be at the same level as the source directory.

下面的项目按预期构建,并将其 build-extrafilters-Desktop_Qt_5_8_0_GCC_64bit-Debug 放在 souces 文件夹的上一层:

TEMPLATE      = lib
CONFIG       += plugin
QT           += widgets
INCLUDEPATH  += ../../app
HEADERS       = extrafiltersplugin.h
SOURCES       = extrafiltersplugin.cpp
TARGET        = $$qtLibraryTarget(pnp_extrafilters)
DESTDIR       = ../../plugins

# install
target.path = $$[QT_INSTALL_EXAMPLES]/widgets/tools/plugandpaint/plugins
INSTALLS += target

CONFIG += install_ok  # Do not cargo-cult this!
uikit: CONFIG += debug_and_release

如何让第一个项目像第二个项目一样工作?

更新

Kali Linux

Qt Creator 4.2.1 Based on Qt 5.8.0 (GCC 5.3.1 20160406 (Red Hat 5.3.1-6), 64 bit)

Built on Jan 20 2017 01:20:15

您可以在 QtCreator 中设置构建目录,方法是进入 "Projects"(左窗格中带有扳手的按钮),然后为您的配置选择 "Build"。页面顶部将有一个 "Build directory" 字段。在您的情况下,您可能应该 check/uncheck 为其中一个项目选中 "shadow build" 复选框。

现在,说到那个警告,事实上 qmake 并不关心你的构建目录到底在哪里,你的项目应该构建得很好。显然有某种错误导致了该警告的引入(您可以查看 here 作为参考)。我不知道它是否仍然相关,但就我个人而言,我在构建带有该警告的项目时从未遇到过任何问题。