Qt vulkan 类 在 windows 上的 make 期间未定义

Qt vulkan classes not defined during make on windows

我一直在尝试编译一个 Qt/Vulkan 项目,该项目在 Linux、Windows 上运行良好。我正在使用 QtCreator、Qt (5.11.0) 和 MingW。

我可以 qmake 没有问题,但是 make 每次引用 QVulkan* class 都会崩溃并出现错误,例如作为 "not defined in this scope",但似乎已经找到并包含 class 的 header。 我试过编译 qt vulkan 示例,但遇到了同样的问题。 我运行配置-v,发现:

Qt Gui:
  Vulkan ................................. yes

这是一个 header 崩溃的例子:

#ifndef WINDU_H
#define WINDU_H

#include <QWindow>
#include <QVulkanInstance>
#include <QVulkanFunctions>
#include <QVulkanDeviceFunctions>

class Windu : public QWindow {
public :
    Windu();
    ~Windu();

    void render();
    void start();
    void reset();

    QVulkanInstance inst;
    QVulkanFunctions* vki;
    QVulkanDeviceFunctions* vkd;

};

#endif

我已将其简化为重要的部分:这给出了 QWindowQVulkanInstanceQVulkanFunctions 的未定义错误QVulkanDeviceFunctions.

我试过单独构建 qtgui,但它也因为找不到 Qt OpenGLES 源文件而崩溃。

我对 windows 上的 C++ 了解不多。

这是我的 .pro 文件:

SHADERS = $$files(*.comp, true)
SHADERS += $$files(*.frag, true)
SHADERS += $$files(*.vert, true)

spirv.output = ${QMAKE_FILE_NAME}.spv
spirv.commands = glslangValidator -V ${QMAKE_FILE_NAME} -o ${QMAKE_FILE_OUT}
spirv.depends = $$SHADERS
spirv.input = SHADERS
spirv.variable_out = COMPILED_SHADERS
spirv.CONFIG = target_predeps

SOURCES = $$files(*.cpp, true)
HEADERS = $$files(*.h, true)

# install
target.path = build
target.depends = spirv

DESTDIR=bin #Target file directory
OBJECTS_DIR=build #Intermediate object files directory
MOC_DIR=build #Intermediate moc files directory

CONFIG+=debug
QMAKE_EXTRA_COMPILERS += spirv

如果需要,这里是回购协议: https://github.com/Paul-Hubert/fantastic-octree/blob/master/fantastic-octree.pro

所以我发现在 Windows 上,获得 Vulkan 类 的唯一方法是自己构建 Qt。我已经这样做了,但是我做错了什么使构建无法使用。您必须按照此处所述构建源:http://doc.qt.io/qt-5/build-sources.html,并使用它来构建项目。我在 QtCreator 中添加了一个工具包来执行此操作。