improved recursive make