BuildAMation 1.2.0a5

BuildAMation is an open source build system and project generator for Windows, Linux and macOS desktop software development in C/C++. It has a declarative markup language based on C# runtime compilation (using Mono on Linux and macOS), and has a plugin system to implement different backends, such as multi-threaded command line builds, VisualStudio or Xcode project generation, or MakeFiles. Common compiler/linker/archiver settings are exposed via C# properties, so you can configure the build using named settings rather than having to remember each toolchain's command line switches (handy for cross-platform development). Build scripts are debuggable in VisualStudio, MonoDevelop or VisualStudio for Mac. You can profile it with any standard tools. A number of standard open source projects have had build scripts written for them already, such as Qt, flex, bison, Python, zeromq, libtiff, zlib. CMake is a similar product.

Tags developers linux windows macos c++ c build-tool
License Apache
State initial

Recent Releases

1.2.0a528 Jun 2018 19:06 minor feature: See the changelog for more details
1.2.0a412 Jun 2018 18:37 minor feature: Detecting WindowsSDKs properly Handling spaces in install path See changelog.txt for details
1.2.0a313 May 2018 14:51 major feature: See changelog for full details.
1.1.713 May 2018 13:43 minor bugfix: Support toolchain in latest VisualStudio 2017 15.7 release.
1.1.611 Mar 2018 15:05 minor bugfix: Support toolchain in latest VisualStudio 2017 15.6 release.
1.2.0a223 Jan 2018 22:04 minor feature: Some new features, and lots of bug fixes.
1.2.0a107 Jan 2018 14:05 major feature: Revamped Publisher to no longer violate the DRY principle, and make more flexible software distributions. Updated TokenizedString implementation to handle the requirements of above.
1.1.507 Dec 2017 23:20 minor bugfix: Now supporting VisualStudio 2017 update 15.5
1.1.404 Oct 2017 19:13 minor feature: Xcode 9 support. Also tested against VisualStudio 2017 15.3.5 update.
1.1.4b125 Sep 2017 19:28 minor feature: Xcode 9 support bug fixes
1.1.331 Aug 2017 19:22 major bugfix: Fixed regression on macOS and Linux introduced in v1.1.2
1.1.219 Aug 2017 22:36 minor bugfix: Support changes in VisualStudio 2017 15.3.1 update
1.1.102 Jun 2017 08:16 minor bugfix: See download link for details
1.1.1b416 May 2017 20:34 minor bugfix: - Race condition fix for MakeFile generation - Added utility functions to get the compiler version and intended bitdepth during a settings patch (most useful in static patches) - Enabled more tests to run in different build modes
1.1.1b313 May 2017 13:12 minor bugfix: - Fixes for Mingw assembler - Fixes for examples
1.1.1b211 May 2017 10:17 minor bugfix: - VS2017 assembler tool - General assembler support improvements on all platforms. - Generate Xcode project fixes when Pedantic warnings are used per file - More bug fixes
1.1.1b121 Apr 2017 11:18 minor feature: - More C++ language specifications exposed in enums - Default to supporting 10.6 as the oldest macOS version for maximum compatibility
1.1.0b325 Mar 2017 11:33 minor feature: Build scripts can now be conditional against tool versions.
1.1.0b219 Mar 2017 23:51 minor feature: -VisualStudio 2017 support -Xcode 8 support -Gcc 5.4 support
1.1.0b115 Mar 2017 14:50 major feature: Added Module configuration support. A Module class can now expose an interface with properties in to allow the user (at the top-level) to change how that module is built, or exposes itself via a public interface. This is intended to allow packages to define generic modules, rather than a fixed configuration defined by the author. Deleted deprecated TokenizedString function, removetrailingseperator.
1.0.5b115 Mar 2017 14:49 minor bugfix: Fixed version check for newer major/minor editions.
1.0.401 Mar 2017 12:55 major bugfix: See for details
1.0.4b316 Feb 2017 15:12 major feature: Primarily including support to include assembler files (.S) into projects, as well as other bug fixes
1.0.4b204 Jan 2017 12:27 minor feature: Bug fixes and performance improvements. See
1.0.4b125 Aug 2016 16:16 minor feature: * Improved speed of dependency sorter * VisualStudio and Xcode projects now use relative paths within them (except for custom build steps) * Xcode UUIDs are now deterministic * Header libraries with linkable code dependencies now forward those to the module that eventually links.
1.0.302 Aug 2016 12:00 minor feature: Some of the highlights of this new version: * Cyclic dependencies are now detected * Progress is displayed on the command line * Windows binaries now include a versioning resource file, using module metadata already in use on Linux and OSX.
1.0.3b312 Jul 2016 10:33 minor bugfix: Cyclic dependencies between modules are now identified, and an exception thrown if found. For example, if module A depends on B depends on A. VisualC link command lines now specify the MACHINE option, honouring the C.ICommonLinkerSettings.Bits property that all the other supported linkers already do. Bam.Core.ProcessState has acquired a BuildStartTime property (of type System.DateTime) that marks the beginning of the build on the local machine. This may be useful in conjunction with Bam.Core.IProductDefinition in your software build. Using the indexer on C.CModuleContainer to get the module for an individual source file will now throw an exception if the path specified does not match any file on disk. In Native build mode, C modules that refer to a number of object files, now detect when new files are added to them in incremental (i.e. non-clean) builds.
1.0.3b230 Jun 2016 01:44 minor feature: Automatic generation of Windows .rc files for binary versioning. For all fixes, see the changelist at
1.0.3b109 Jun 2016 15:58 minor feature: - Native 64-bit Mono on OSX - Progress updates - Plugins that fail to build now don't have to cause the entire build to be fatal
1.0.218 May 2016 13:15 minor feature: Optimisations, new features, and bug fixes. See for details.
1.0.2b310 May 2016 07:08 minor feature: Optimisations in the Bam.Core assembly have sped up TokenizedString creation, dependency graph population, scanning of package repositories, to name a few areas. Improvements are most obvious in project generation build modes, like VSSolution or Xcode, which are not swamped by individual compilation/link times. Some larger builds tested now take less than 50 of the previous time in Bam (YMMV). Bam.Core.Module.ClosingPatch is now applied to all child modules of a container (e.g. a collection of source files). An indexer on C source collections has been added, accepting a string, which will return a list of child modules whose path contains the string. This is a simpler API for identifying individual source files from a collection created from a wildcarded path; patches can then be applied to individual sources. For example var source = this.CreateCSourceContainer("*.c"); var foo = source "foo.c" ; foo.PrivatePatch(settings = ...);. Added Bam.Core.IOWrapper.CreateDirectory and CreateDirectoryIfNotExists functions, which wrap System.IO.Directory.Creates, but upon any exceptions thrown, will append details of the directory path in use, to provide context to the error.
1.0.2b220 Apr 2016 09:07 minor feature: - OSX dynamic libraries and plugins now default to using an install name of @rpath/ lib filename . This requires an executable loading such files to define RPATHs - by default, a application built with Bam defines @executable_path/ as an initial RPATH. This restores previous behaviour, but this change allows applications to define additional RPATHs to just the application, rather than each dynamic library, to locate those dependencies. - VisualStudio project files, project filter, and solution files are now only rewritten to disk if they don't exist, or differ from the existing file. For larger projects, this reduces the time in which the VisualStudio IDE becomes responsive after incremental changes to the build scripts. Note that Xcode project generation does not support this feature yet. - Multiple Xcode projects referencing the same source file now honour per-module compiler options of those files. (Not per configuration - Xcode does not support this.) - Added an assembly level attribute, Bam.Core.PackageDirectoryRedirect, which redirects where the (packagedir) macro refers to, so that source for a package can reside elsewhere. For example, if package build scripts and package source reside in different source control repositories, or don't support nested checkouts. - Added Bam.Core.Module.ClosingPatch, which is similar to a private patch, but is guaranteed to be the last patch to be executed on a module. This allows logic to be applied once all settings on a module have been calculated.
1.0.114 Apr 2016 14:37 major bugfix: See