C++ code in Org-mode

1 C++

This is a simple example with one c++ file, all in one src code block.
#include <iostream>

int main()
{
    std::cout << "Hello World++! 2.9";
}
The src block looks like:
    #+HEADERS: :tangle hello.c++ :exports code :eval never
    #+BEGIN_SRC C++
    // source code
    #+END_SRC
The HEADERS block is on a separate line because when the buffer is evaluated, code will get run, and the SRC blocks will get rewritten, as well as the RESULTS blocks. Since we want the headers to be preserved, we can't make them part of the SRC block. You can also tangle a Makefile.
clean:
    -rm hello

hello:  hello.c++
    clang++ hello.c++ -o hello
With the org mode headers exporting the code, and not evaluating this block. Just like the C++ code. We'll evaluate the makefile, and run the program, a bit further down.
    #+HEADERS: :tangle Makefile :exports code :eval never
    #+BEGIN_SRC makefile
    # Makefile
    #+END_SRC
Now, we tangle the code out to the files.
    #+NAME: tangle-buffer
    #+HEADERS: :exports both :results value
    #+BEGIN_SRC emacs-lisp
    (org-babel-tangle)
    #+END_SRC
(org-babel-tangle)
That will write out two files when the buffer is evaluated using org-babel-execute-buffer, bound to \C-c \C-v b. Give this block a name, so that where the results go can be controlled. Do that by giving the RESULTS block the name of the SRC block. Org will then produce a table of the results of executing the elisp, which is the two files produced. And put the results here:
hello.c++ Makefile
Next, we run make with the target to compile the code. You could also simply write the compiler command here.
    #+NAME: make-clean-hello
    #+BEGIN_SRC sh :exports both :results output
    make clean
    make hello
    #+END_SRC
make clean
make hello
And make will run our compilation as spec'd in the Makefile we just tangled out.
rm hello
clang++ hello.c++ -o hello
And now get the output by running the program.
    #+NAME: run-hello
    #+BEGIN_SRC sh :exports results
    ./hello
    #+END_SRC
Which prints out our hello, world text. Which is has version number to convince myself it gets updated.
Hello World++! 2.9