Si tratta di un follow-up a Using #include to load OpenCL codeincorporazione del codice OpenCL in eseguibile
Ho notato che quando si utilizza il metodo descritto da grrussel (e utilizzato a Bullet Physics), la stringa creata ha tutti i ritorni a capo spogliato (commenti sembrano essere spogliato anche io, ma non sono troppo preoccupato per questo). Ora per la maggior parte questo va bene se il codice opencl incluso non contiene definizioni di preprocessore, ma se c'è il codice non riuscirà a compilare con il compilatore OpenCL.
C'è un modo per ottenere il #include
per mantenere i newline in là, o c'è un metodo migliore per incorporare il codice opencl nel mio eseguibile (oltre a copiare la stringa in un file cpp e mettere virgolette su tutto ciò)?
Ho provato questo in Visual Studio 2010, non sono sicuro se altri compilatori mostrano lo stesso comportamento. Preferirei un metodo che non richiede strumenti esterni e funziona con una varietà di compilatori/piattaforme.
codice Copiato da altra risposta:
In C fonte ++/C
#define MSTRINGIFY(A) #A
char* stringifiedSourceCL =
#include "VectorAddKernels.cl"
Nella fonte OpenCL
MSTRINGIFY(
__kernel void VectorAdd(__global float8* c)
{
// snipped out OpenCL code...
return;
}
);
['xxd -i'] (http://linux.die.net/man/1/xxd) fa questo per te. –
@HenryGomersall: 'xxd' non è facilmente disponibile su Windows o? – Macke
Non so;) Penso che sia disponibile tramite msys o cygwin. Ho postato il commento perché mi ci è voluto un po 'per trovare la soluzione xxd che ha trovato prima la tua risposta, quindi sicuramente con Linux è una buona soluzione. –