Linux + OS X: | Windows: |
cmany¶
Easily batch-build cmake projects!
cmany is a command line tool to easily build variations of a CMake C/C++ project. It combines different compilers, cmake build types, compilation flags, processor architectures and operating systems.
For example, to configure and build a project combining clang++ and g++ with both Debug and Release:
$ cmany build -c clang++,g++ -t Debug,Release path/to/CMakeLists.txt
The command above will result in four different build trees, placed by default
under a build
directory placed in the current working directory:
$ ls build/*
build/linux-x86_64-clang++3.9-Debug
build/linux-x86_64-clang++3.9-Release
build/linux-x86_64-gcc++6.1-Debug
build/linux-x86_64-gcc++6.1-Release
Each build tree is obtained by first configuring CMake with the given
parameters, and then invoking cmake --build
to build the project at once.
You can also use cmany just to simplify your cmake workflow! These two command sequences have the same effect:
typical cmake | cmany |
---|---|
$ mkdir build $ cd build $ cmake .. $ cmake --build . |
$ cmany b |
Features¶
- Easily configure and build many variations of your project with one simple command.
- Saves the tedious work of dealing with many build trees by hand.
- Sensible defaults:
cmany build
will create and build a single project using CMake’s defaults. - Transparently pass flags (compiler flags, processor defines or cmake cache variables) to any or all of the builds.
- Useful for build comparison and benchmarking. You can easily setup bundles of flags, aka variants.
- Useful for validating and unit-testing your project with different compilers and flags.
- Useful for creating distributions of your project.
- Avoids a full rebuild when the build type is changed. Although this feature already exists in multi-configuration cmake generators like Visual Studio, it is missing from mono-configuration generators like Unix Makefiles.
- Run arbitrary commands in every build tree or install tree.
More info¶
Support¶
- Gitter room: https://gitter.im/cmany_/community.
- send bug reports to https://github.com/biojppm/cmany/issues.
- send pull requests to https://github.com/biojppm/cmany/pulls.
Current status¶
cmany is in alpha state, under current development.
Known issues¶
- cmany invokes the compilers given to it to find their name and version. So far, this successfully works with Visual Studio, gcc (also with arm-linux and mips-linux counterparts), clang, icc and zapcc. However, the current implementation for guessing the name and version is fragile and may fail in some compilers which were not tested. Please submit a bug or PR if you see such a failure.
- Though cmany works in OS X with gcc and clang, using Xcode has not been tested at all. Get in touch if you are interested in getting cmany to work with Xcode.
- Pure C projects (ie not C++) should work but have not yet been tested. Some bugs may be present.
License¶
cmany is permissively licensed under the MIT license.