class_docstr: Abstract base class to define the interface that must be implemented
  by real compiler classes.  Also has some utility methods used by
  several compiler classes.
  
  The basic idea behind a compiler abstraction class is that each
  instance can be used for all the compile/link steps in building a
  single project.  Thus, attributes common to all of those compile and
  link steps -- include directories, macros to define, libraries to link
  against, etc. -- are attributes of the compiler instance.  To allow for
  variability in how individual files are treated, most of those
  attributes may be varied on a per-compilation or per-link basis.
class_docstr_tok: ["Abstract","base","class","to","define","the","interface","that","must","be","implemented","by","real","compiler","classes",".","Also","has","some","utility","methods","used","by","several","compiler","classes",".","The","basic","idea","behind","a","compiler","abstraction","class","is","that","each","instance","can","be","used","for","all","the","compile\/link","steps","in","building","a","single","project",".","Thus",",","attributes","common","to","all","of","those","compile","and","link","steps","--","include","directories",",","macros","to","define",",","libraries","to","link","against",",","etc",".","--","are","attributes","of","the","compiler","instance",".","To","allow","for","variability","in","how","individual","files","are","treated",",","most","of","those","attributes","may","be","varied","on","a","per-compilation","or","per-link","basis","."]
docstr: Define the executables (and options for them) that will be run
  to perform the various stages of compilation.  The exact set of
  executables that may be specified here depends on the compiler
  class (via the 'executables' class attribute), but most will have:
    compiler      the C/C++ compiler
    linker_so     linker used to create shared objects and libraries
    linker_exe    linker used to create binary executables
    archiver      static library creator
  
  On platforms with a command-line (Unix, DOS/Windows), each of these
  is a string that will be split into executable name and (optional)
  list of arguments.  (Splitting the string is done similarly to how
  Unix shells operate: words are delimited by spaces, but quotes and
  backslashes can override this.  See
  'distutils.util.split_quoted()'.)
docstr_tok: ["Define","the","executables","(","and","options","for","them",")","that","will","be","run","to","perform","the","various","stages","of","compilation",".","The","exact","set","of","executables","that","may","be","specified","here","depends","on","the","compiler","class","(","via","the","'executables","'","class","attribute",")",",","but","most","will","have",":","compiler","the","C\/C++","compiler","linker_so","linker","used","to","create","shared","objects","and","libraries","linker_exe","linker","used","to","create","binary","executables","archiver","static","library","creator","On","platforms","with","a","command-line","(","Unix",",","DOS\/Windows",")",",","each","of","these","is","a","string","that","will","be","split","into","executable","name","and","(","optional",")","list","of","arguments",".","(","Splitting","the","string","is","done","similarly","to","how","Unix","shells","operate",":","words","are","delimited","by","spaces",",","but","quotes","and","backslashes","can","override","this",".","See","'distutils.util.split_quoted","(",")","'",".",")"]
code: def set_executables(self, **kwargs):
      """Define the executables (and options for them) that will be run
      to perform the various stages of compilation.  The exact set of
      executables that may be specified here depends on the compiler
      class (via the 'executables' class attribute), but most will have:
        compiler      the C/C++ compiler
        linker_so     linker used to create shared objects and libraries
        linker_exe    linker used to create binary executables
        archiver      static library creator
  
      On platforms with a command-line (Unix, DOS/Windows), each of these
      is a string that will be split into executable name and (optional)
      list of arguments.  (Splitting the string is done similarly to how
      Unix shells operate: words are delimited by spaces, but quotes and
      backslashes can override this.  See
      'distutils.util.split_quoted()'.)
      """
  
      # Note that some CCompiler implementation classes will define class
      # attributes 'cpp', 'cc', etc. with hard-coded executable names;
      # this is appropriate when a compiler class is for exactly one
      # compiler/OS combination (eg. MSVCCompiler).  Other compiler
      # classes (UnixCCompiler, in particular) are driven by information
      # discovered at run-time, since there are many different ways to do
      # basically the same things with Unix C compilers.
  
      for key in kwargs:
          if key not in self.executables:
              raise ValueError(
                  "unknown executable '%s' for class %s"
                  % (key, self.__class__.__name__)
              )
          self.set_executable(key, kwargs[key])
  
imports: import sys
  import os
  import re
  import warnings
  from .errors import CompileError, LinkError, UnknownFileError, DistutilsPlatformError, DistutilsModuleError
  from .spawn import spawn
  from .file_util import move_file
  from .dir_util import mkpath
  from ._modified import newer_group
  from .util import split_quoted, execute
  from ._log import log
label_desc: Use image node_id 2 for calling the CCompiler obj's underlying member method code with example usage: obj.set_executables() without return types