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 a preprocessor macro for all compilations driven by this
  compiler object.  The optional parameter 'value' should be a
  string; if it is not supplied, then the macro will be defined
  without an explicit value and the exact outcome depends on the
  compiler used (XXX true? does ANSI say anything about this?)
docstr_tok: ["Define","a","preprocessor","macro","for","all","compilations","driven","by","this","compiler","object",".","The","optional","parameter","'value","'","should","be","a","string",";","if","it","is","not","supplied",",","then","the","macro","will","be","defined","without","an","explicit","value","and","the","exact","outcome","depends","on","the","compiler","used","(","XXX","true","?","does","ANSI","say","anything","about","this","?",")"]
code: def define_macro(self, name, value=None):
      """Define a preprocessor macro for all compilations driven by this
      compiler object.  The optional parameter 'value' should be a
      string; if it is not supplied, then the macro will be defined
      without an explicit value and the exact outcome depends on the
      compiler used (XXX true? does ANSI say anything about this?)
      """
      # Delete from the list of macro definitions/undefinitions if
      # already there (so that this one will take precedence).
      i = self._find_macro(name)
      if i is not None:
          del self.macros[i]
  
      self.macros.append((name, value))
  
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 6 for calling the CCompiler obj's underlying member method code with example usage: obj.define_macro(name, value) without return types