Лучший способ структурирования проекта на C++
Я недавно начал изучать CMake и структурировал проект подобным образом:
- project
CMakeLists.txt
- cmake
Functions.cmake
- include
- project
lib.hpp
- src
- project
CMakeLists.txt
lib.cpp
- examples
CMakeLists.txt
- Example1
CMakeLists.txt
ex1.hpp
ex1.cpp
resource.jpg
При установке с CMake библиотеки попадают в папки bin и lib, а исполняемые файлы примеров (examples) в папку с вместе с исходниками:
- install dir
- bin
lib.dll
- lib
lib.lib/lib.a/…
- include
- project
lib.hpp
- examples
- Example1
ex1.hpp
ex1.cpp
resource.jpg
ex1.exe
Это правильный подход? Мне не очень нравится, что файлы, ресурcы и исполняемые файлы примеров расположены в одном месте. Мне кажется, что лучше вместо отдельных папок examples/tests/apps в корневом каталоге, лучше создать подкаталоги в include, src, resources с заголовочными, исходными файлами и ресурсами соответственно. А dll-библиотеки и исполняемые файлы файлы поместить в один каталог bin:
- project
CMakeLists.txt
- cmake
Functions.cmake
- include
- project
- lib.hpp
- examples
CMakeLists.txt
- Example1
ex1.hpp
- src
CMakeLists.txt
- project
- CMakeLists.txt
- lib.cpp
- examples
CMakeLists.txt
- Example1
CMakeLists.txt
ex1.cpp
- resources
- examples
- Example1
ex1.cpp
resource.jpg
- install dir
- bin
lib.dll
ex1.exe
- lib
lib.lib/lib.a/…
- include
- project
lib.hpp
- examples
- Example1
ex1.hpp
- src
- examples
- Example1
ex1.cpp
- resources
- examples
- Example1
resource.jpg
Это позволит сделать красивую универсальную функцию CMake для сборки любой цели, так как структура каждой цели будет практически идентична.
Прошу прощения за глупый вопрос, но мне действительно интересно, какой подход лучше выбрать? Или какие есть альтернативы?