OpenCL:头文件的附加目录

OpenCL:头文件的附加目录,opencl,specifications,Opencl,Specifications,OpenCL规范在5.6.3构建选项中写道: 5.6.3.1预处理器选项 有人能解释一下这是什么意思吗?据我所知,您不能将头文件插入OpenCL内核。那么,这种选择有什么用呢 编辑:链接到OpenCL规范: EDIT2:OpenCL内核不允许包含头文件,这一假设是错误的。现在,多亏了jhacketheripper,我知道的更多了。它允许您添加一些包含头文件的目录,这些头文件不在标准的include搜索路径中。通过这种方式,您可以告诉编译器这些特定头文件在系统上的位置 例如,假设文件foo.h不在

OpenCL规范在5.6.3构建选项中写道:

5.6.3.1预处理器选项 有人能解释一下这是什么意思吗?据我所知,您不能将头文件插入OpenCL内核。那么,这种选择有什么用呢

编辑:链接到OpenCL规范:


EDIT2:OpenCL内核不允许包含头文件,这一假设是错误的。现在,多亏了jhacketheripper,我知道的更多了。

它允许您添加一些包含头文件的目录,这些头文件不在标准的include搜索路径中。通过这种方式,您可以告诉编译器这些特定头文件在系统上的位置

例如,假设文件foo.h不在标准include路径中(在Unix系统上通常为
/usr/include
),而是在
/home/foo/my_headers/foo.h
中,您可以要求编译器通过以下操作搜索/home/foo/my_头文件:

g++ -I/home/foo/my_headers foo.c -o foo

完整地说,本节标题介绍了word preprocessor,它是在编译器之前调用的程序,用于将所有
#something
指令替换为其等效指令
#include将被
foo.h
文件的内容所取代。

我包括用于开发的标题,但对于发行版,我将所有标题和依赖项处理到一个文件中,然后将该源代码嵌入二进制文件。

谢谢您的回答。但我认为这与问题不符。我问的是OpenCL语言(C的扩展)。我很好奇为什么OpenCL编译器会有这样一个标志,因为它不允许在OpenCL内核文件中包含头文件。对不起,它是完全一样的!别担心,我知道OpenCL在运行中编译,但是我不得不使用它的两三次,我没有遇到头文件不能包含在OpenCL内核中的事实。你是对的。我尝试将头文件包含到我的内核中,效果很好。哇,我怎么会错过这个?!很高兴能帮助您^^^想象一下GPU内核在某种程度上等同于CPU程序。在编译后者时,需要定义所有使用的函数。那么,为什么GPU编程会有所不同呢?事实上,我也是这么做的。除非我总是将内核作为字符串资源包含到二进制文件中。我有一个由makefile触发的小脚本。它将内核*.cl文件转换为字符指针,然后传递给clBuildProgramWithSource()API。如果我有头文件,它有一些函数的实现,应该包含在几个内核中(我的意思是这些函数在所有内核中都是辅助的,我不想复制代码)我是如何做到这一点的?我能把函数保留在header中吗?内核和header函数会被编译吗?您能否指定(可以举例说明)在这种情况下如何使用“-I”选项?
g++ -I/home/foo/my_headers foo.c -o foo