Đây là một followup để Using #include to load OpenCL codenhúng OpenCL mã vào thực thi
tôi đã nhận thấy rằng khi bạn sử dụng phương pháp mô tả bởi grrussel (và được sử dụng trong Bullet Physics), chuỗi tạo ra có tất cả các dòng mới lột (bình luận dường như cũng bị tước, nhưng tôi không quá lo lắng về điều đó). Bây giờ đối với hầu hết các phần này là tốt nếu mã opencl bao gồm không có bất kỳ định nghĩa tiền xử lý trong nó, nhưng nếu có mã sẽ không biên dịch với trình biên dịch OpenCL.
Có cách nào để có được các #include
để giữ các dòng mới trong đó, hoặc là có một phương pháp tốt hơn để nhúng mã opencl vào thực thi của tôi (khác với sao chép chuỗi vào một tệp cpp và đặt dấu ngoặc kép xung quanh tất cả mọi thứ)?
Tôi đã thử nghiệm điều này trong Visual Studio 2010, tôi không chắc liệu các trình biên dịch khác có biểu hiện cùng một hành vi hay không. Tôi thích một phương thức không yêu cầu bất kỳ công cụ bên ngoài nào và hoạt động với nhiều trình biên dịch/nền tảng khác nhau.
mã được sao chép từ câu trả lời khác:
Trong C++/C nguồn
#define MSTRINGIFY(A) #A
char* stringifiedSourceCL =
#include "VectorAddKernels.cl"
Trong nguồn OpenCL
MSTRINGIFY(
__kernel void VectorAdd(__global float8* c)
{
// snipped out OpenCL code...
return;
}
);
['xxd -i'] (http://linux.die.net/man/1/xxd) thực hiện điều này cho bạn. –
@HenryGomersall: 'xxd' không có sẵn trên Windows, hoặc? – Macke
Tôi không biết;) Tôi nghĩ rằng nó có sẵn thông qua msys hoặc Cygwin. Tôi đăng bình luận bởi vì nó đã cho tôi một chút thời gian để tìm giải pháp xxd đã đi qua câu trả lời của bạn đầu tiên, do đó, chắc chắn dưới linux đó là một giải pháp tốt. –