c-unit
CUnit is the answer to c/c++ dependency management in the CMake world. It comes as an amalgamation of other attempts including awesome projects like mason, hunter & conan.
We feel that each of those projects have respective shortcomings and based on all of them, we have designed c-unit to be best in breed.
note c-unit has a strong emphasis on creating statically linked binary distributions, therefore most default recipes are for static compilation. You are more than welcome to create shared lib recipes and publish them.
Furthermore, you can issue global
cmake override flags converting
all dependencies to shared libs
install
cu is implemented in JS for flexibility, so installation anywhere is dead simple.
npm i -g cunit-manager
Repos and Recipes
cu works with recipes
in repositories. The global default repository is here:
github.com/cunit/cunits
note you can add your own repos public or private both locally and git based as follows
# GITHUB EXAMPLE PUBLIC OR PRIVATE cunit repo add https://github.com/myorg/my-cunits.git# OR A LOCAL DIR cunit repo add file:///var/cunits-local-on-disk
A recipe is super simple
name: opencvrepository: url: https://github.com/opencv/opencv.git cmake: flags: CMAKE_BUILD_TYPE: Release BUILD_SHARED_LIBS: OFF BUILD_JPEG: OFF BUILD_JASPER: OFF BUILD_PNG: ON BUILD_ZLIB: ON BUILD_IPP_IW: OFF BUILD_ITT: OFF BUILD_JAVA: OFF BUILD_PROTOBUF: OFF WITH_PROTOBUF: OFF WITH_CAROTENE: OFF WITH_CUBLAS: OFF WITH_CUDA: OFF WITH_CUFFT: OFF WITH_FFMPEG: OFF WITH_GPHOTO2: OFF WITH_GSTREAMER: OFF WITH_GTK: OFF WITH_ITT: OFF WITH_IPP: OFF WITH_JASPER: OFF WITH_LAPACK: OFF WITH_MATLAB: OFF WITH_NVCUVID: OFF WITH_OPENCL: OFF WITH_OPENCLAMDBLAS: OFF WITH_OPENCLAMDFFT: OFF WITH_OPENEXR: OFF WITH_PTHREADS_PF: OFF WITH_V4L: OFF WITH_WEBP: OFF findTemplate: cmake/FindOpenCV.cmake.hbs dependencies: libtiff: Release-v4-0-9 zlib: v1.2.11 libpng: v1.6.33 libjpeg: 8.4.0
Quickstart
It takes a few simple steps.
- Create a cunit.yml file in the root of your project
name: cunit-example dependencies: protobuf: 3.1.0 opencv: 3.4.1 tools: protobuf: 3.1.0
- Then run configure
cunit project configure
- In your root
CMakeLists.txt
BEFORE yourproject
declaration add something like the following:
cmake_minimum_required(VERSION 3.10) # INSERT THIS LINEinclude(${CMAKE_CURRENT_LIST_DIR}/.cunit/cunit.cmake) project(cunit_example)
Cross-Compiling "Toolchains"
Create your standard cmake toolchain file and use it as follows:
name: cunit-exampleprofiles: [Debug,Release] toolchains: "aarch64-linux-gnu": cmake/aarch64.cmake # file would be at this relative location from the project root dependencies: protobuf: 3.1.0 opencv: 3.4.1
In order to use with non-cmake
dependencies and scripts
add the following to the top of your toolchain file:
include(${CMAKE_CURRENT_LIST_DIR}/.cunit/cunit.toolchain.cmake)
and add the following to the bottom of your toolchain file
cunit_toolchain_export()