将OpenCL代码嵌入到可执行文件中

hel*_*922 5 c++ visual-studio-2010 opencl

这是使用#include加载OpenCL代码的后续操作

我注意到当你使用grrussel描述的方法(并在Bullet Physics中使用)时,创建的字符串会删除所有换行符(注释似乎也被剥离了,但我并不太担心).现在大多数情况下,如果包含的opencl代码中没有任何预处理器定义,那么这很好,但如果有代码将无法使用OpenCL编译器进行编译.

有没有得到的方式#include来保持换行符在那里,或者有没有更好的方法,以嵌入的OpenCL代码到我的可执行文件(不是复制字符串转换成CPP文件,并把报价周围的一切其他)?

我在Visual Studio 2010中对此进行了测试,我不确定其他编译器是否表现出相同的行为.我更喜欢一种不需要任何外部工具并且可以与各种编译器/平台配合使用的方法.

其他答案的复制代码:

在C++/C源代码中

#define MSTRINGIFY(A) #A
char* stringifiedSourceCL = 
#include "VectorAddKernels.cl"
Run Code Online (Sandbox Code Playgroud)

在OpenCL源代码中

MSTRINGIFY(
   __kernel void VectorAdd(__global float8* c)
   {
    // snipped out OpenCL code...
    return;
   }
);
Run Code Online (Sandbox Code Playgroud)

Mac*_*cke 2

我会编写一个小工具,它可以从文本文件中生成一个带有常量字符串的 cpp,然后您可以将其与其他内容一起编译。

这就是 Qt 的资源编译器 moc 所做的事情(还有更多,因为它有一个完整的 API),并且还有 Windows 资源工具包的选项(请参阅下面的答案)。

无论如何,一个可以在目录中遍历文件并从中构建 cpp 的小型构建工具应该足够了,并且您可以在 15 分钟内将其组合在一起(只要有适当的脚本编写技能)。

更新:根据 Henry 的评论,在 Linux(或使用 Msys/Cygwin)上,您可以使用xxd和 -i (即 xxd -i)标志,它读取文件并生成一个包含正确定义的确切内容的 c-include 文件。