function(GenerateOpenCLHeader varname outfile files) message("Creating ${outfile}...") file(WRITE ${outfile} "const char * ${varname} = \n") math(EXPR ARG_END "${ARGC}-1") foreach(IDX RANGE 2 ${ARG_END}) list(GET ARGV ${IDX} filename) file(READ ${filename} content) string(REGEX REPLACE "\\s*//[^\n]*\n" "\n" content "${content}") string(REGEX REPLACE "\\\\" "\\\\\\\\" content "${content}") string(REGEX REPLACE "\"" "\\\\\"" content "${content}") string(REGEX REPLACE "([^\n]+)\n" "\"\\1\\\\n\"\n" content "${content}") string(REGEX REPLACE "\n+" "\n" content "${content}") file(APPEND ${outfile} "${content}") endforeach() file(APPEND ${outfile} ";\n") endfunction(GenerateOpenCLHeader)