這是一個後續到Using #include to load OpenCL code嵌入的OpenCL代碼轉換成可執行
我注意到,當您使用grrussel描述(和子彈物理使用)的方法,所創建的字符串有刪除所有換行符(評論似乎也被剝奪了,但我並不擔心這一點)。現在大多數情況下,如果包含的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;
}
);
['xxd -i'](http://linux.die.net/man/1/xxd)爲你做到這一點。 –
@HenryGomersall:'xxd'在Windows上不易用,或者? – Macke
我不知道;)我認爲它可以通過msys或cygwin。我發佈了這個評論,因爲我花了一點時間才發現xxd解決方案首先遇到了你的答案,所以肯定在linux下這是一個很好的解決方案。當然是 –