[http://www.bakefile.org/doc/ch03.html Chapter 3 of the manual] briefly describes the two kinds of conditions used in Bakefiles, Strong and Weak. The manual defines a weak condition as one which is based on a variable defined with a set command. What this really means is that a weak condition is one which can be resolved during compilation of the bakefile. Weak conditions can be used just about anywhere; strong conditions can be used in only a few. If you try to use a strong condition in the wrong place, the bakefile compiler will quit with an error: " only weak condition allowed in this context". Strong conditions can be used only in places where bakefile is able to transmit the condition into the build-file (i.e., Makefile, project file, etc.). This boils down to targets and set commands. Note that you can't turn a strong condition into a weak one with set, either. Bakefile thankfully refuses, because if it tried it wouldn't work. There is also a special condition, one where the condition is cond="target" or begins with cond="target and ". It's used in set and add-target commands and means that the condition extends the conditions of the parent target. For example, suppose that you have to do some extra work after compilation with a particular toolset, and that your project includes some conditionally built targets. You write the following add-target tag: {{{ #!xml }}} Bakefile will invoke bar every time it encounters a foo tag without checking the conditions of the target enclosing the foo. If you change the add-target's condition to "target and compiler='baz'", the bar invocations will be made conditional on the same option as the enclosing target.