Expat can be built on Windows in two ways: using MS Visual Studio .NET or Cygwin. * Cygwin: This follows the Unix build procedures. * MS Visual Studio 2013, 2015 and 2017: Use CMake to generate a solution file for Visual Studio, then use msbuild to compile. For example: md build cd build cmake -G"Visual Studio 15 2017" -DCMAKE_BUILD_TYPE=RelWithDebInfo .. msbuild /m expat.sln * All MS C/C++ compilers: The output for all projects will be generated in the \ and xmlwf\\ directories. * Creating MinGW dynamic libraries from MS VC++ DLLs: On the command line, execute these steps: pexports libexpat.dll > expat.def pexports libexpatw.dll > expatw.def dlltool -d expat.def -l libexpat.a dlltool -d expatw.def -l libexpatw.a The *.a files are mingw libraries. * Special note about MS VC++ and runtime libraries: There are three possible configurations: using the single threaded or multithreaded run-time library, or using the multi-threaded run-time Dll. That is, one can build three different Expat libraries depending on the needs of the application. Dynamic Linking: By default the Expat Dlls are built to link dynamically with the multi-threaded run-time library. The libraries are named - libexpat(w).dll - libexpat(w).lib (import library) The "w" indicates the UTF-16 version of the library. Versions that are statically linking with the multi-threaded run-time library can be built with -DEXPAT_MSVC_STATIC_CRT=ON. Static Linking: (through -DEXPAT_SHARED_LIBS=OFF) The libraries should be named like this: Multi-threaded: libexpat(w)MT.lib Multi-threaded Dll: libexpat(w)MD.lib The suffixes conform to the compiler switch settings /MT and /MD for MS VC++. An application linking to the static libraries must have the global macro XML_STATIC defined.