我认为这是一个简单的问题,但我无法弄清楚。在 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)
问题很简单:空格!空间具有空间意义,它们将配置文件中的值分开。您必须用双引号将包含空格的路径和文件名括起来!
另一个问题是缺少尾部反斜杠,这意味着您将继续在下一行添加参数,如 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)
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)