title: Is this a good directory structure to maintain a large C++ project?
body: <p>I have been trying to figure out a good directory structure that is maintainable for large C++ projects. During my search I came across this resource here <a href="https://api.csswg.org/bikeshed/?force=1&amp;url=https://raw.githubusercontent.com/vector-of-bool/pitchfork/develop/data/spec.bs" rel="nofollow noreferrer">link</a>. If I loosely follow the structure stated in that document, it seems I get something similar to the following</p>
  
  <pre><code>.
  ├── CMakeLists.txt
  ├── build
  │   ├── Executable-OutputA
  │   └── Library-OutputA
  ├── cmake
  │   └── *.cmake
  ├── docs
  ├── include
  │   └── *.h
  ├── lib
  │   ├── LibraryA
  │   │   ├── *.cpp
  │   │   └── *.h
  │   └── LibraryB
  │       ├── *.cpp
  │       └── *.h
  ├── src
  │   ├── ExecutableA
  │   │   ├── *.cpp
  │   │   └── *.h
  │   └── ExecutableB
  │       ├── *.cpp
  │       └── *.h
  ├── tests
  └── third_party
      ├── External-ProjectA
      └── External-ProjectB
  </code></pre>
  
  <ul>
  <li><strong>build:</strong> holds the outputted executables and libraries generated by the project</li>
  <li><strong>cmake:</strong> holds all the cmake packages that the project may require</li>
  <li><strong>doc:</strong> holds documentation files, typically doxygen</li>
  <li><strong>include:</strong> holds public headers files (might not be needed, not sure)</li>
  <li><strong>lib:</strong> holds all the libraries the user creates with their respective source and header files</li>
  <li><strong>src:</strong> holds all the executable projects the user makes with their respective headers and source files</li>
  <li><strong>tests:</strong> files to test both the executables and libraries </li>
  <li><strong>third_party:</strong> any third party projects, libraries, ect. usually downloaded from online or cloned</li>
  </ul>
  
  <p>I believe this is an appropriate structure for large projects, but I do not have too much experience with projects that produce more than 3 or 4 targets. I want to ask the community for feedback and if they agree with the structure laid out above, or have better suggestions. </p>
  
  <p>Edit: I have not been able to find too many posts detailing multiple target outputs as well as third party dependencies for large projects.</p>