如何在 Qt Creator 项目中包含 OpenCL?

use*_*073 1 qt qt-creator

我认为这是一个简单的问题,但我无法弄清楚。在 Visual Studio 中,您可以通过项目属性对话框添加包含目录、库目录和依赖项 (OpenCL.lib)。

但是在 Qt Creator 中,它允许您添加外部库,但它不能帮助您设置头文件,并且键入头文件的绝对路径不起作用。将头文件添加到.pro文件似乎也不起作用。

所以我添加了外部库

添加库对话框

然后我尝试在以下位置添加头文件的路径INCLUDEPATH

INCLUDEPATH += $$PWD/../../../../../../Program Files (x86)/AMD APP/lib/x86    
               $$PWD/../../../../../../Program Files (x86)/AMD APP/include
Run Code Online (Sandbox Code Playgroud)

代码截图

这次它给出的错误是:

错误截图

但我也收到了:

"Can't open File.obj" // this happens if I just add the External Library and then click build
"No such file or directory 'C:/Program Files (x86)/AMD APP/include/CL/cl.h'" // but that file does exist.
Run Code Online (Sandbox Code Playgroud)

解决方案

对于任何需要它的人来说,最终工作的 .pro 文件是

QT       += core gui

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

TARGET = clTest100
TEMPLATE = app


SOURCES += main.cpp\
        mainwindow.cpp

HEADERS  += mainwindow.h

FORMS    += mainwindow.ui

win32:CONFIG(release, debug|release): LIBS += -Lc:/opencl/lib/x86/ -lOpenCL
else:win32:CONFIG(debug, debug|release): LIBS += -Lc:/opencl/lib/x86/ -lOpenCL

INCLUDEPATH += c:/opencl/include
DEPENDPATH += c:/opencl/include
Run Code Online (Sandbox Code Playgroud)

Mar*_*k R 5

问题很简单:空格空间具有空间意义,它们将配置文件中的值分开。您必须用双引号将包含空格的路径和文件名括起来!

另一个问题是缺少尾部反斜杠,这意味着您将继续在下一行添加参数,如 Phlucious 所写。

题外话
正确的方法是创建prf 文件,因为每个带有 openCL 的项目都将使用相同的设置。此外,每台机器都有这个库的不同位置,所以每台机器都必须有自己的 prf 文件版本。在其他情况下,您会遇到协作问题(与其他开发人员共享代码)。如果您使用 prf 文件,那么您将通过在项目中添加来包含它:CONFIG += <prf file name>

所以你的 prf 文件的内容应该是这样的:

INCLUDEPATH += "c:/Program Files (x86)/AMD APP/include"
LIBS += -L"c:/Program Files (x86)/AMD APP/lib/x86" -lOpenCL
Run Code Online (Sandbox Code Playgroud)


括号可能有类似的问题。我从来没有在我的项目中走这条路,因为它也可能是一个问题。
在下一次尝试中尝试使用单斜杠的 scape 括号(不要使用相对路径):

INCLUDEPATH += "c:/Program Files \(x86\)/AMD APP/include"
LIBS += -L"c:/Program Files \(x86\)/AMD APP/lib/x86" -lOpenCL
Run Code Online (Sandbox Code Playgroud)

如果这不起作用,请尝试使用三重斜线转义(我喜欢这种方法的一些蹩脚链接):

INCLUDEPATH += "c:/Program Files \\\(x86\\\)/AMD APP/include"
LIBS += -L"c:/Program Files \\\(x86\\\)/AMD APP/lib/x86" -lOpenCL
Run Code Online (Sandbox Code Playgroud)

也许更好的解决方案是将这些库安装到一些更方便的目录中,该目录不包含括号和空格。

您也可以尝试添加到 pro 文件中,用于调试目的,例如:

message(LIBS $$LIBS)
message(INCLUDEPATH $$INCLUDEPATH)
Run Code Online (Sandbox Code Playgroud)