Лучший способ структурирования проекта на 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 для сборки любой цели, так как структура каждой цели будет практически идентична.

Прошу прощения за глупый вопрос, но мне действительно интересно, какой подход лучше выбрать? Или какие есть альтернативы?


Ответы (0 шт):