cleanCppProject  0.2.0
Design Document

Goal of this project is to create a base empty project for everyone to use.

Used technologies

Project is built on these technologies:

  • Git
    • Source control
  • CMake
    • Used as build tool
    • Doxygen generation
    • CTest - for running tests
  • Doxygen
    • For documentation and API reference generation
    • Generates wiki from markdown files
    • Custom modern style included
      • to try modern style see doc/doxygen/Doxyfile.in line 3
      • if you do not care feel free to delete doc/doxygen/*.html and doc/doxygen/*.ccs
    • Graphviz - for creating UML diagrams with doxygen
  • clang-format
    • Configuration file in the root of project for easy formating
    • Clang-format automatically uses nearest *.clang-format* file
    • Target format will run format on all source files
  • clang-tidy
    • With target tidy you can run static code analysis
  • cppcheck
    • With target cppcheck you can run static code analysis
  • Catch
    • Modern unit test framework
    • Downloaded via externalproject from external/CMakeLists.txt

There is extra support for these:

  • .ycm_extra_conf.py for ycmd support
    • Smart autocompletion, goto def, etc.
    • Works in Vim, Emacs, Sublime Text 3, Atom, Visual Studio Code
    • Site: github.com/Valloric/ycmd
  • Sublime text 3 project file
    • with build system targets

Deployment view

To showcase PlantUML, here is a graph for you:

This graph was generated from this:

1 \\startuml
2 top to bottom direction
3 
4 frame "Internal network" {
5 
6  frame "git server" {
7  artifact "git repository" as gitS
8  }
9 
10  frame "build server" {
11  artifact "build git repository" as gitB
12  node doxygen
13  node "build system" as buildB
14  }
15 
16  frame "developer machine" as dev {
17  artifact "local git repository" as gitD
18  node "build system" as buildD
19  artifact "binaries" as releaseD
20  }
21 
22  gitD --> buildD
23  buildD --> releaseD
24 
25  gitS --> gitB
26  gitS <--> gitD
27 
28  frame "internal web server" {
29  artifact "generated documentation" as doc
30  }
31 
32  :developer: ..> dev : "develops at"
33  :developer: ..> doc : "looks at"
34 
35 
36  gitB --> doxygen
37  doxygen --> doc
38 
39 }
40 
41 frame "external web server" {
42  artifact "customer support, etc."
43  artifact "released versions" as release
44 }
45 
46 :customer: ..> release : downloads
47 
48 gitB --> buildB
49 buildB -right-> release
50 \\enduml

For more inspiration on what can be done with PlantUML look at their pages plantuml.com, and see main function for example sequence diagram.