and what about systems that don't have strace, like BSD or OSX or solaris or windows? there's dtrace on those platforms (minus windows), which requires root, and requiring root access for dependency resolution isn't exactly a great idea.
It can be a pain, but it's really not that hard to handle if your build system provides a way to abstract out build patterns.
I've used ktrace to help create minimal jail environments, quite handy: http://www.aagh.net/files/mkjail
Suddenly make is starting to seem pretty nice...
If my program needs to be dynamically linked with, say, OpenSSL, but rarely actually uses it, how does introducing strace into this situation help?
moreover, how can you run strace to figure out dependencies on a program that hasn't been built yet? how does it determine when new dependencies are added?