Есть ли какое-либо преимущество при размещении заголовков в «include»? Подкаталог проекта?

Я заметил, что источник популярной библиотеки C ++ окалина имеет отдельный src а также include папки, содержащие *.cpp а также *.h файлы соответственно. Есть ли преимущество в том, чтобы делать это таким образом, вместо того, чтобы просто помещать каждый .cpp в тот же каталог, что и соответствующий .h?

2

Решение

Часто так проще структурировать свой код, особенно если вы собираетесь экспортировать его как API с предварительно скомпилированными библиотеками. Затем (публичные) заголовки становятся вашим API, имеет смысл хранить их отдельно от исходного кода, поскольку это часть кода, которая должна распространяться вместе с библиотекой.

8

Другие решения

Используемые варианты

  • module/*.{cpp,h} — лучше всего подходит для пространственной локализации связанных файлов, хуже всего, когда необходимо применить строгую фокусировку API (обратная совместимость, выпуск или исправление и т. д.)
  • module/{include/*.h, src/*.{cpp,h}} — хорошо для API, хорошо для пространственной местности, мой предпочтительный выбор
  • include/module/*.h,src/module/*.{cpp,h} — лучше всего подходит для API, не очень хорош для пространственного расположения
0

Реальных плюсов и минусов нет, ну не в общем. При разработке API (по сравнению с приложениями) вам нужно будет предоставить набор включений в вашу библиотеку, и именно эта роль заголовочных файлов заставит разработчика разрабатывать решение их отделения от источников в их файловой системе.

Я не думаю, что организация лучше, чем другая, но я могу дать вам два совета, которые помогут вам решить, что лучше для ваших проектов:

  • Постарайтесь максимально упростить вашу файловую иерархию. Когда дело доходит до настройки проекта, установки скриптов и контроля версий, меньше встроенных папок — меньше головной боли.

  • Самое главное не там, где расположены заголовочные файлы, а как они включены:

    • <> или «»
    • Из внутренних исходных файлов или из внешнего кода, который использует ваши заголовки?
    • С путем к ним или напрямую по имени файла?

Видя, как вы хотите, чтобы ваши заголовки были написаны при вызове #include поможет вам решить, где вам удобнее их разместить.

Насколько я понимаю, мне не очень нравится разделение заголовков / источников. Некоторые заголовки не предназначены для показа моими API, поэтому либо все мои источники находятся в одной папке, либо я предпочитаю публичное / частное разделение.

0
По вопросам рекламы [email protected]