Derive configs
==============

bake supports deriving configs, which allows you to put repetetive settings in a base config.

Deriving a config
*****************

Derving a config in bake is pretty straight forward, and looks like this:

.. code-block:: text

    ExecutableConfig A
    LibraryConfig    B, extends: A
    CustomConfig     C, extends: B
    ExecutableConfig D, extends: C

.. note::

    The config type of the parent config does not matter, but only settings which are valid in BOTH configs will be inherited.
    In the example above D gets the dependencies from A, because "Dependency" is valid in all configs, but D does not get 
    the "Files" from A, because "Files" is not valid in CustomConfig.


Inheritance implications
************************

============================        =========================================
Setting                             Derived
============================        =========================================
Set                                 parent + child

Dependency                          parent + child

ExternalLibrary                     parent + child
                                    (ordered by line number)

ExternalLibrarySearchPath           parent + child
                                    (ordered by line number)

UserLibrary                         parent + child
                                    (ordered by line number)

PreSteps                            parent + child

PostSteps                           parent + child

Makefile                            used from parent if not 
                                    in child

CommandLine                         used from parent if not
                                    in child 

Files                               parent + child

ExcludeFiles                        parent + child

IncludeDir                          parent + child

LinkerScript                        used from parent if not in child

ArtifactName                        used from parent if not in child

MapFile                             used from parent if not in child
============================        =========================================


============================        =========================================
Toolchain Setting                   Derived
============================        =========================================
basedOn                             used from parent if not in child

outputDir                           used from parent if not in child

command                             used from parent if not in child

LibPrefixFlags                      parent + child

LibPostfixFlags                     parent + child

Flags                               parent + child

Define                              parent + child

InternalDefines                     used from parent if not in child

InternalIncludes                    used from parent if not in child

LintPolicy                          parent + child

Docu                                used from parent if not in child
============================        =========================================