Nicolas told me that the actual order for static dependencies in that example would also be that one : > (((B1 || B2); B) || ((C1 || C2); C)); A However he points out that there's still a difference between static and dynamic dependencies : static dependencies can control the way rules are selected. If two rules can build a target but the first rule has a static dependency that cannot be built then the second rule will be tried. Dynamic dependencies cannot do that since once a rule is invoked it is considered to be definitively selected. Best, Daniel