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: Add 'libname' to the list of libraries that will be included in
  all links driven by this compiler object.  Note that 'libname'
  should *not* be the name of a file containing a library, but the
  name of the library itself: the actual filename will be inferred by
  the linker, the compiler, or the compiler class (depending on the
  platform).
  
  The linker will be instructed to link against libraries in the
  order they were supplied to 'add_library()' and/or
  'set_libraries()'.  It is perfectly valid to duplicate library
  names; the linker will be instructed to link against libraries as
  many times as they are mentioned.
code: def add_library(self, libname):
      """Add 'libname' to the list of libraries that will be included in
      all links driven by this compiler object.  Note that 'libname'
      should *not* be the name of a file containing a library, but the
      name of the library itself: the actual filename will be inferred by
      the linker, the compiler, or the compiler class (depending on the
      platform).
  
      The linker will be instructed to link against libraries in the
      order they were supplied to 'add_library()' and/or
      'set_libraries()'.  It is perfectly valid to duplicate library
      names; the linker will be instructed to link against libraries as
      many times as they are mentioned.
      """
      self.libraries.append(libname)
  
imports: import sys, os, re
  from distutils.errors import *
  from distutils.spawn import spawn
  from distutils.file_util import move_file
  from distutils.dir_util import mkpath
  from distutils.dep_util import newer_group
  from distutils.util import split_quoted, execute
  from distutils import log
label_desc: Use image node_id 10 for calling the CCompiler obj's underlying member method code with example usage: obj.add_library(libname) without return types