YAB |
Yet Another Buildtool |
||
|
Introduction
Yab (Yet Another Buildtool) is another replacement for the ubiquitous Make tool. Many replacements have been built as a result of frustration with Make. Yab attempts to combine the best features. In particular: Yab works at a higher level of abstraction: Make mostly leaves it to the programmer to specify which command line arguments need to be specified when building different types of targets. Unfortunately, these arguments differ from compiler to compiler and operating system to operating system. Yab provides a higher level API to the programmer by adopting the notion of Toolset from the Boost build system. A Toolset is a Python object that represents the compiler and other build tools available on your system. You specify build parameters using a common toolset API, and Yab translates them into the appropriate compiler arguments. Yab automatically calculates dependencies: Yab scans through your C and C++ source files for include directives. There is no need to use "mkdepend" or "gcc –M". Yab will automatically rebuild an object if an included header is changed. Yab handles subdirectories (sanely): Yab scripts can be in one main file, or distributed among several directories. Each script file creates a Python namespace, and scripts can refer to each other's namespaces. Yab scripts can also refer to other top-level yab scripts. This is useful when one project uses another as a component. Yab scripts are written in Python: Like Cons and SCons, script writers have a full programming language at their disposal. There is no need to use less powerful macro facilities to cram functionality into a makefile. Yab is essentially a Python library. In order to use Yab effectively for non-trival projects, you should be mildly familiar with Python. Yab autoconfs: Yab includes some of the features of GNU autoconf. You can probe your build environment and test your compiler using a Python API. The results can be passed to the compiler through preprocessor macros or a config.h file. Yab can generate the config.h from a template or from scratch. Yab has a powerful build variable mechanism: Make allows you to specify build variables as global values. The value of the variable must be the same for each target in the Makefile. Jam takes this a step further, allowing you to bind build variables on specific targets. Yab also allows you to set build variables on any target. However, the components of that target will inherit the target's values. For example, if you set the CCFLAGS variable on a shared library to be '-fPIC', any C object file that gets compiled into that library will also have CCFLAGS=-fPIC. Yab can do Java: Make cannot examine the directory structure of your source files. This is a major drawback for programming languages that impose a strict structure on their source files (like Java and Python). Yab includes Ant's notion of a fileset. Using filesets, you will not have to redundantly specify information that already exists in your source directory structure. Yab can generate VC++ project files: Yab can automatically generate a Visual C++ project file from a YABFile. Visual C++ programmers need not give up the browsing features of the IDE to have a platform independent make.
|
||