2013-07-04 94 views
1

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

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

所以我添加了外部库

Add library dialog

然后我尝试添加路径头文件中INCLUDEPATH

INCLUDEPATH += $$PWD/../../../../../../Program Files (x86)/AMD APP/lib/x86  
       $$PWD/../../../../../../Program Files (x86)/AMD APP/include 

Screenshot of code

这一次的错误时给出的是:

Screenshot of error

但我也收到:

"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. 

SOLUTION

对于任何需要它的.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 

回答

4

问题很简单:空间Spaces have spatial meaning他们分开pro文件中的值。 您必须包含带双引号的空格的路径和文件名!

另一个问题是缺少拖尾斜杠,意味着你正在继续像Phlucious写的那样在下一行添加参数。

题外话
正确的方法是创建prf file因为与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 


可能有类似的问题,用括号。我从未在我的项目中走过这样的道路,这也可能是一个问题。
在下次尝试尝试用单斜杠景观括号(不要使用相对路径):

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

,如果这不起作用尝试用三重斜线逃脱(我喜欢一些crapy链接用这种的方法):

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

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

您也可以尝试添加亲文件,用于调试目的喜欢的东西:

message(LIBS $$LIBS) 
message(INCLUDEPATH $$INCLUDEPATH) 
+0

它仍然不能用双引号。我读了你发布的关于具有特殊含义的空间的链接,但是QT Creator自己写了没有双引号的路径,这只会增加混淆。无论如何,它不带或不带双引号。这是我当前的.pro文件.http://pastebin.com/tj4qnpD6它仍然是(错误)给出的错误是无法打开包含文件:'CL/cl.h':没有这样的文件或目录 – user1873073

+1

这是空间字符诅咒:)。看到我的更新。 –

+0

就是这样。我把opencl文件移到了c:\ opencl,然后INCLUDEPATH + = $$ PWD /../../../../../../ opencl/include(它指向c:\ opencl)和#包括,我在做生意。谢谢您的帮助! – user1873073

1

您需要当你想要表达式分割时,除了最后一行之外,每行的末尾都有一个反斜杠通过PRO文件中的多行。

例如,您

INCLUDEPATH += $$PWD/../../../../../../Program Files (x86)/AMD APP/lib/x86  
       $$PWD/../../../../../../Program Files (x86)/AMD APP/include 

应该

INCLUDEPATH += $$PWD/../../../../../../Program Files (x86)/AMD APP/lib/x86 \ 
       $$PWD/../../../../../../Program Files (x86)/AMD APP/include 
+0

还在说错误:C1083:无法打开包含文件:“CL/c.h”:没有这样的文件或目录 – user1873073

+0

对不起,应该是CL/cl.h。但经过第二次看,我不认为第一行应该在那里。尽管感谢您指出如何添加多个包含。 – user1873073