I keep the shader code in include files with the code wrapped as C++11 raw strings. That way, you can edit them in a clean format and still include the code as std::string's.
The code becomes embedded in the application and the build system dependencies monitor the included shader files..
std::string fragment_shader_code = R"shader(
uniform sampler2D source;
void main()
{
// Sample the source texture...
vec3 color = texture2D( source, gl_TexCoord[0].st ).rgb;
// Compute output color
gl_FragColor = vec4( color, 1.0 );
} // end main /////////////////////////////////////////
)shader";