Using cget

Installing cmake packages

When package is installed from one of the package sources(see Package source) using the install command, cget will run the equivalent cmake commands to install it:

mkdir build
cd build
cmake --build .
cmake --build . --target install

However, cget will always create the build directory out of source. The cget.cmake is a toolchain file that is setup by cget, so that cmake can find the installed packages. Other settings can be added about the toolchain as well(see init).

The cget.cmake toolchain file can be useful for cmake projects to use. This will enable cmake to find the dependencies installed by cget as well:

cmake -DCMAKE_TOOLCHAIN_FILE=$CGET_PREFIX/cget/cget.cmake ..

Instead of passing in the toolchain, cget provides a build command to take of this already(see build). This will configure cmake with cget.cmake toolchain file and build the project:

cget build

By default, it will build the all target, but a target can be specified as well:

cget build --target some_target

For projects that don’t use cmake, then its matter of searching for the dependencies in CGET_PREFIX. Also, it is quite common for packages to provide pkg-config files for managing dependencies. So, cget provides a pkg-config command that will search for the dependencies that cget has installed. For example, cget pkg-config can be used to link in the dependencies for zlib without needing cmake:

cget install zlib,
g++ src.cpp `cget pkg-config zlib --cflags --libs`

Installing non-cmake packages

Cget can install non-cmake packages as well. Due note that non-cmake build systems do not have a way to tell the build where the dependencies are installed. Cget will set environmnet variables such as PKG_CONFIG_PATH and PATH, but if the dependencies are not found using pkg-config or these standard environmnet variables then you will need to consult the build scripts as to what protocol is needed to resolve the dependencies.

Using custom cmake

For packages that don’t support building with cmake. A cmake file can be provided to build the package. This can either build the sources or bootstrap the build system for the package:

cget install SomePackage --cmake mycmake.cmake

Header-only libraries

For libraries that are header-only, cget provides a cmake file header to install the headers. For example, Boost.Preprocessor library can be installed like this:

cget install boostorg/preprocessor --cmake header

By default, it installs the headers in the ‘include’ directory, but this can be changed by setting the INCLUDE_DIR cmake variable:

cget install boostorg/preprocessor --cmake header -DINCLUDE_DIR=include


For binaries, cget provides a cmake file binary which will install all the files in the package without building any source files. For example, the clang binaries for ubuntu can be installed like this:

cget install clang,  --cmake binary

CMake Subdirectory

If cmake is not in the top-level directory this will use the cmake in a subdirectory:

cget install google/protobuf --cmake subdir

By default, it uses a directory named cmake, but this can be changed by setting the CMAKE_DIR variable:

cget install sandstorm-io/capnproto --cmake subdir -DCMAKE_DIR=c++


A cmake boost is provided to install boost libraries as well:

cget install boost, --cmake boost

Libraries can be selected with cmake variables BOOST_WITH_ and BOOST_WITHOUT_. For example, just Boost.Filesystem(and it dependencies) can be built as:

cget install boost, --cmake boost -DBOOST_WITH_FILESYSTEM=1

Also, everthing can be built except Boost.Python like the following:

cget install boost, --cmake boost -DBOOST_WITHOUT_PYTHON=1


A cmake meson is provided to build packages that use the meson build system. CMake variables of the form MESON_SOME_VAR are passed to meson as a variable some-var.

To use meson you will need python 3.5 or later, with meson and ninja installed. It can be installed with pip3 install meson ninja. Cget does not provide an installation of meson.


A cmake autotools is provided to build autotools-based libraries. Autotools is not a portable build system and may not work on all platforms.