Xcode下OpenCL源代码中文件的递归包含

Xcode下OpenCL源代码中文件的递归包含,xcode,include,opencl,Xcode,Include,Opencl,我正在寻找建立一个主机程序调用OpenCL代码运行在我的GPU设备。cl源具有以下形式: #include "skip_mwc.cl" typedef struct{ uint x; uint c; } mwc64x_state_t; //blah... 如果我去掉#include指令并将“skip_mwc.cl”的内容直接复制/粘贴到此源代码中,我可以部分“构建”,至少会出现一些错误,这表明我的编译器(clang9 cl编译器)至少可以识别内核代码。通过#include方

我正在寻找建立一个主机程序调用OpenCL代码运行在我的GPU设备。cl源具有以下形式:

#include "skip_mwc.cl"
typedef struct{ uint x; uint c; } mwc64x_state_t;
//blah...
如果我去掉
#include
指令并将“skip_mwc.cl”的内容直接复制/粘贴到此源代码中,我可以部分“构建”,至少会出现一些错误,这表明我的编译器(clang9 cl编译器)至少可以识别内核代码。通过
#include
方法,我得到以下错误:

Build log::
<program source>:9:10: fatal error: 'skip_mwc.cl' file not found
#include "skip_mwc.cl"
生成日志::
:9:10:致命错误:未找到“skip_mwc.cl”文件
#包括“跳过mwc.cl”
我已经检查过了,文件在搜索路径中,所以我倾向于认为我的Xcode IDE没有正确地索引.cl文件以执行自动文件包含(如在.c或.cpp中)

我确实希望避免将源文件从一个文件复制/粘贴到另一个文件中。任何来自熟悉Xcode的人的建议都是非常受欢迎和需要的,他们遇到了这个问题并设法解决了它

谢谢,
有两种可能的解决方案:

  • clBuildProgram()
    中设置
    -I include_dir
    编译器选项,另请参见
  • 从C++中读取两个文件,使用代码> fStrase,字符串将它们的内容连接起来。
    另请参阅通过将OpenCL代码嵌入可执行文件的选项。

    我使用了方法2,该方法很有效,但我想知道当内核中有大量.cl文件时会发生什么。需要不断地向字符串解析添加新文件。如果Xcode像处理.cpp文件一样处理这些文件的索引,并在看到时直接包含它们,那就太好了。这里有一种方法可以检测目录中具有特定结尾(如
    .cl
    )的所有文件,然后自动将它们读取到循环中的字符串中。你必须给他们一个特定的标签,比如
    …\u 1.cl
    …\u 2.cl
    。。。为了确保连接顺序正确,实际上,没有办法让Xcode动态解析另一个“yyy.cl”文件中调用的#include“xxx.cl”的内容?必须以“静态”的方式向其提供信息。