code: def _compile(self, target, results_dir, source):
      
      obj = self._objpath(target, results_dir, source)
      safe_mkdir_for(obj)
  
      abs_source = os.path.join(get_buildroot(), source)
  
      # TODO: include dir should include dependent work dir when headers are copied there.
      include_dirs = []
      for dep in target.dependencies:
        if self.is_library(dep):
          include_dirs.extend([os.path.join(get_buildroot(), dep.target_base)])
  
      cmd = [self.cpp_toolchain.compiler]
      cmd.extend(['-c'])
      cmd.extend(('-I{0}'.format(i) for i in include_dirs))
      cmd.extend(['-o' + obj, abs_source])
      cmd.extend(self.get_options().cc_options)
  
      # TODO: submit_async_work with self.run_command, [(cmd)] as a Work object.
      with self.context.new_workunit(name='cpp-compile', labels=[WorkUnitLabel.COMPILER]) as workunit:
        self.run_command(cmd, workunit)
  
      self.context.log.info('Built c++ object: {0}'.format(obj))
docs: Compile given source to an object file.