> "How do you setup the rest of dependencies configuration ? How do you know that there are no hidden dependencies ?"
Each dependency has its own build configuration file. You build a tree of dependencies and start compilation from the lowest level (i.e. the build objects without any non-compiled dependencies).
With such an approach, why would you have a hidden dependency?
> "How do you handle time ?"
What do you mean by this?
> "How do you ensure that it can be reproduce ?"
Semantic version control on the dependencies.
> "How do you define the dependencies ?"
Is this a hard problem?
> "How do you make sure that nothing change the build paths ? The deps paths ? That your environment is exactly the one you want ?"
By testing during the build process. In the case of the environment, it's just a question of checking against a list of expected environment settings (e.g. OS version, processor architecture, processor features, etc...).
> "That you dynamicly link to the correct lib ?"
This comes down to version control.
> "Also how do you clean behind yourself ?"
Again, is this a hard problem? Even the simplest of makefiles can describe how to handle this.
Perhaps it's best to give a concrete example of a task which is hard for a build system to manage, because I'm still not seeing the complexity here.