Xcode 下 OpenCL 源文件的递归包含

Recursive include of files in OpenCL source under Xcode

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

#include "skip_mwc.cl"
typedef struct{ uint x; uint c; } mwc64x_state_t;
//blah...

如果我去掉 #include 指令和 copy/paste 将“skip_mwc.cl”的内容直接放到这个源代码中,我可以部分“构建”并至少得到一些错误,表明我的编译器(clang9 cl 编译器)至少可以识别内核代码。使用 #include 方法我得到以下错误:

Build log::
<program source>:9:10: fatal error: 'skip_mwc.cl' file not found
#include "skip_mwc.cl"

我已经检查过,文件在搜索路径中,所以我倾向于认为我的 Xcode IDE 没有正确索引 .cl 文件来执行自动文件包含(如 .c 或 .cpp)。

我真的很想避免 copy/paste 从一个文件导入另一个文件。非常欢迎和需要熟悉 Xcode、遇到此问题并设法解决它的人的任何建议。

谢谢, A

两种可能的解决方案:

  1. clBuildProgram() 中设置 -I include_dir 编译器选项,另请参阅 this answer
  2. 从 C++ 中读取两个文件 fstream 和 string-concatenate 它们的内容。

另请参阅通过 stringification macro 将 OpenCL 代码嵌入可执行文件的选项。