Installation Instructions for Windows
*************************************

If you are compiling for MinGW or cygwin, please refer to the INSTALL file,
which is automatically generated by autotools (e.g. running bootstrap.sh).

If you are using Microsoft Visual Studio:
- Open the relevant solution file in /msvc:
  libusb_2013.sln for Visual Studio 2013,
  libusb_2015.sln for Visual Studio 2015,
  libusb_2017.sln for Visual Studio 2017,
  libusb_2019.sln for Visual Studio 2019 or later.
- If you want to debug the library, uncomment the ENABLE_DEBUG_LOGGING define
  in msvc\config.h
- Select your configuration and compile the project

Installing and building libusb via vcpkg
****************************************

You can download and install libusb using the vcpkg dependency manager:

    git clone https://github.com/Microsoft/vcpkg.git
    cd vcpkg
    ./bootstrap-vcpkg.bat
    ./vcpkg integrate install
    vcpkg install libusb

The libusb port in vcpkg is kept up to date by Microsoft team members and
community contributors. If the version is out of date, please create an issue
or pull request (https://github.com/Microsoft/vcpkg) on the vcpkg repository.

Destination directories
***********************

The 32-bit binaries are placed in a Win32\ directory at the root of the
library.
The 64-bit binaries are placed in a x64\ directory.

Troubleshooting
***************

If the compilation process complains about missing libraries, ensure that the
default library paths for your project points to the relevant directories.
If needed, these libraries can be obtained by installing the latest Windows
SDK.

Links
*****

Additional information related to the Windows backend:
  http://windows.libusb.info
