title: What is the difference between 'compiling and linking' and just 'compiling' (with g++)?
body: <p>I'm new to c++ and have been learning how to create a makefile and have noticed that one of the examples I have (which has to do with 'updating' changed files, and ignoring unchanged files) has the following command:</p>
  
  <pre><code># sysCompiler is set to g++
  .o:.cpp 
      $(sysCompiler) -c $&lt;
  </code></pre>
  
  <p>According to the manual for g++, this compiles or assembles the source files but doesn't link them. </p>
  
  <blockquote>
    <p>>
    -c
    Compile or assemble the source files, but do not link. The linking stage simply is not done. The ultimate output is in the form of an object file for each source file.
    By default, the object file name for a source file is made by replacing the suffix <code>.c',</code>.i', <code>.s', etc., with</code>.o'.
    Unrecognized input files, not requiring compilation or assembly, are ignored.</p>
  </blockquote>
  
  <p>In other words, am just wondering what exactly 'not linking' means when it comes to compiling in c++?</p>