Hi,
Here is the situation I observed: 
First, I compile application A, which failed because I introduced some incorrect C statements in the source code.
Then, I compile application B, which succeeded.
Finally, I compile A again (without clean), the building system surprisingly generated A’s binary!  According to the verbose output, there is no compiling phase but only linking phase this time. If I run this fake binary, it’s B’s content.  
Any idea what is going on?
Chen