0

我需要在 Windows 中使用 Qbs 和 QML 的 Qt 应用程序中使用 OpenCV

我正在使用随 Qt 5.11 安装的 MVSC2017(64 位)编译器

我有 OpenCV 3.41(我必须链接到 opencv_world341.lib)

我知道它在 C:\opencv\build 中,但据我了解 Qbs,我不能使用来自 'C:' 的路径(如果我在这里错了,请告诉我)

我无法更改为 (C|Q)make,因为我需要使用 qbs 和 qml 文件将此应用程序中的功能集成到更大的应用程序中

我尝试使用

import qbs

Project {
      CppApplication {
        Depends { name: "Qt.core" }
        Depends { name: "Qt.quick" }
        Depends { name: "OpenCV" }

        cpp.cxxLanguageVersion: "c++11"

        files: [
            "main.cpp",
            "qml.qrc",
        ]

    }
    CppApplication {
         name: "OpenCV"
         cpp.includePaths: ["../../../../../../opencv/build/include/"]
         cpp.libraryPaths: ["../../../../../../opencv/build/x64/vc15/lib/"]
         cpp.staticLibraries: "opencv_world341"
    }
}

../我从包含 qbs 文件的目录开始确定了 git bash 的数量

但我得到了错误

C1083: Cannot open include file: 'opencv2/core.hpp': No such file or directory

我在 Qbs 文件中做错了吗?

我知道opencv安装有效,因为我在visual studio community 2017中使用它来测试它

4

1 回答 1

0

我设法找到了方法,有两个问题,第一个是我在 Qtcreator 中使用 Debug 构建,带有 opencv_world341.lib 文件,所以链接没有正确完成,我需要 opencv_world341d。 lib 文件,但我不想丢失发布版本,所以我添加了一个属性块,以便静态库文件根据使用 qbs.buildVariant 属性的构建类型进行设置

第二个问题是,将包含路径和库路径与我正在构建的应用程序分开是行不通的,所以我把它放在 CppApplication 块中,现在它可以工作了

我像这样更改了 qbs 文件:

import qbs

Project {
    CppApplication {
        Depends { name: "Qt.core" }
        Depends { name: "Qt.quick" }
        cpp.includePaths: ["../../../../../../opencv/build/include/"]
        cpp.libraryPaths: [
            "../../../../../../opencv/build/x64/vc15/lib/",
            "../../../../../../opencv/build/x64/vc15/bin/"
        ]
        cpp.cxxLanguageVersion: "c++11"

        Properties
        {
            condition: qbs.buildVariant == "debug"
            cpp.staticLibraries: ["opencv_world341d"]
        }
        Properties
        {
            condition: qbs.buildVariant == "release"
            cpp.staticLibraries: "opencv_world341"
        }

        files: [
            "main.cpp",
            "qml.qrc",
        ]
    }
}
于 2018-07-11T20:26:28.710 回答