En mi lugar tenemos una gran base de código C++ y creo que hay un problema con la forma en que se usan los archivos de encabezado.Dependencias de los archivos de encabezado entre los módulos de C++
Hay muchos proyectos de Visual Studio, pero el problema está en el concepto y no está relacionado con VS. Cada proyecto es un módulo, que realiza una funcionalidad particular. Cada proyecto/módulo está compilado para biblioteca o binario. Cada proyecto tiene un directorio que contiene todos los archivos fuente - * .cpp y * .h. Algunos archivos de encabezado son API del módulo (me refiero al subconjunto de archivos de encabezado que declaran la API de la biblioteca creada), algunos son internos.
Ahora al problema: cuando el módulo A necesita trabajar con el módulo B, A agrega el directorio de origen de B para incluir la ruta de búsqueda. Por lo tanto, todos los encabezados internos del módulo B son vistos por A en el tiempo de compilación.
Como efecto secundario, el desarrollador no está obligado a concentrar cuál es la API exacta de cada módulo, lo que considero un mal hábito de todos modos.
Considero una opción de cómo debería ser en primer lugar. Pensé en crear en cada proyecto un directorio dedicado que solo contenga archivos de encabezado de interfaz. Un módulo de cliente que desee utilizar el módulo puede incluir solo el directorio de interfaz.
¿Este enfoque está bien? ¿Cómo se resuelve el problema en tu lugar?
UPD En mi lugar anterior, el desarrollo se realizó en Linux con g ++/gmake y, de hecho, utilizamos para instalar archivos de cabecera de API en un directorio común es algunas de las respuestas propuestas. Ahora tenemos el proyecto de Windows (Visual Studio)/Linux (g ++) usando cmake para generar archivos de proyecto. ¿Cómo fuerzo la instalación preconstruida de archivos de encabezado API en Visual Studio?
Gracias Dmitry
Creo que Google coloca todos sus encabezados internos en una carpeta llamada interna. – xian