Use the Visual Studio batch files (located in the VisualC folder) to
conveniently generate solutions for Visual Studio 2008, 2010, and 2012.
It also contains a cleaner script and a convenient script for automatically
running all the test suites.

There is a script (check.bin.compatibility.vs2010.bat) in VisualC\build-scripts
which will build <sdl_root>\VisualC (which is not generated by this premake
system) and build SDL2.dll using the generated SDL2.sln in the VS2010 folder. It
will copy the SDL2.dll over to each test project in <sdl_root>\VisualC and
subsequently run those tests to verify binary compatibility between the SDL2.dll
that came from the premake solution and the executables which were built using
the old solution files.

The windows project currently depends on most of the libraries inherently
added to the links list by Visual Studio. The additional libraries SDL2 depends
on are as follows:

  -imm32
  -oleaut32
  -winmm
  -version
  -OpenGL32
  -DirectX

OpenGL32 is an optional dependency. If it is not located for whatever reason,
SDL2 will build fine without it. DirectX is another optional dependency for
SDL2. Unlike the manually-created VS projects, the meta-build system supports
not having DirectX support and still being able to build and run through most of
the projects (using the OpenGL renderer or the software renderer).

Run the clean script to clear out the directory of VS-related files and
binaries.

Ben:
Please note that the script for building the VS2012 solution from the
command prompt seems to not be working properly. This issue is
currently unresolved.