在Windows 10中的Qtcreator qbs文件中导入OpenCV .lib

时间:2018-07-11 19:14:06

标签: windows qt qbs

我需要在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中使用了它进行测试

1 个答案:

答案 0 :(得分:0)

我设法找到了解决方法,有两个问题,第一个是我正在Qtcreator中使用带有opencv_world341.lib文件的Debug版本,所以链接未正确完成,我需要为此,使用了opencv_world341d.lib文件,但我不想丢失发行版本,因此我添加了一个Properties块,以便静态库文件根据使用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",
        ]
    }
}