这是 Using #include to load OpenCL code 的跟进
我注意到,当您使用 grrussel 描述的方法(并在 Bullet Physics 中使用)时,创建的字符串会删除所有换行符(注释似乎也被删除,但我不太担心) .现在在大多数情况下,如果包含的 opencl 代码中没有任何预处理器定义,这很好,但如果有,代码将无法使用 OpenCL 编译器进行编译。
有没有办法让 #include
保留换行符,或者有没有更好的方法将 opencl 代码嵌入到我的可执行文件中(除了将字符串复制到 cpp 文件中并在所有内容上加上引号)?
我在 Visual Studio 2010 中对此进行了测试,我不确定其他编译器是否表现出相同的行为。我更喜欢一种不需要任何外部工具并适用于各种编译器/平台的方法。
从其他答案复制的代码:
在 C++/C 源代码中
#define MSTRINGIFY(A) #A
char* stringifiedSourceCL =
#include "VectorAddKernels.cl"
在 OpenCL 源代码中
MSTRINGIFY(
__kernel void VectorAdd(__global float8* c)
{
// snipped out OpenCL code...
return;
}
);
最佳答案
我会编写一个小工具,从文本文件中生成一个带有常量字符串的 cpp,然后您可以将其与其他内容一起编译。
这就是 Qt 的资源编译器 moc 所做的(以及更多,因为它有一个完整的 API),还有 Windows 资源工具包的选项(参见下面的 this answer)。
无论如何,一个可以在目录中遍历文件并从中构建 cpp 的小型构建工具就足够了,而且您可以在 15 分钟内将它们组合在一起(如果具备合适的脚本编写技能)。
更新:根据 Henry 的评论,在 Linux(或 Msys/Cygwin)上,您可以使用 xxd使用 -i(即 xxd -i
)标志,它读取一个文件并生成一个包含正确定义的确切内容的 c-include 文件。
关于c++ - 将 OpenCL 代码嵌入到可执行文件中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8248731/