Hunter: organize freedom

Welcome to the Hunter package manager documentation!

Hunter is a CMake driven cross-platform package manager for C/C++[1] projects.With the help of Hunter you can organize builds forLinux,Windows,macOS,iOS,Android,Raspberry Pi and other platforms.Third-party external projects are highly customizable, effectively allowing youto have myriad variants of directories with them based on combinations ofversion to build, static/shared, CMake-D options, Release/Debug, etc.

Separate root directories will be created for each variant, so they allcan be used simultaneously on one machine without conflicts(just likevirtualenv but automatically).Going further: each such root directory can be shared between severallocal projects if configuration of externals matches.So when you are starting another project from scratch and use the same externalpackages, there will be no additional copy or build triggered; the onlyoverhead is checking the existence of aDONE stamp file for each package.In case your local environment is similar enough to the continuous integrationenvironment of Travis/AppVeyor service, then build will not be triggered at all- cached binaries will be downloaded from GitHub server instead.

Mainly Hunter is designed to manage packages with CMake build system under thehood and existing CMake packages can be quite easily integrated into system,but non-CMake packages are also supported too using custom templates(build schemes) withExternalProject_Add command(s).

The Hunter client is a collection of CMake-only modules(i.e. it’snot a binary likeapt-get or script likebrew)so it supports out-of-the-box all platforms/generators/IDEs which CMake canhandle, like Visual Studio, Xcode,Android Studio,QtCreator, NMake, Ninja, Cygwin or MinGW. It works fine with CMake-GUI too.

The prime directive used for adding package to the current root ishunter_add_package which companioning CMake’sfind_package. Forexample:

hunter_add_package(BoostCOMPONENTSsystemfilesystemiostreams)find_package(BoostCONFIGREQUIREDsystemfilesystemiostreams)

Sounds interesting? Keep reading!

[1]C++ is the main goal, works for other types as well. SeeManage anything.