2010-02-05 15 views
6

Soy bastante nuevo en el desarrollo de código C/C++ en MSVS, pero una de las cosas que ya me ha confundido es por qué, después de agregar un conjunto de archivos fuente y de encabezado a mi proyecto, arriba respectivamente en las carpetas de MSVS 'Archivos de origen' y 'Archivos de encabezado', ¿tengo que decir posteriormente al compilador dónde están mis archivos de encabezado en 'Proyecto-> propiedades-> C/C++ -> General'. Me parece que MSVS ya debería intentar resolver cualquier declaración 'include' ... '' mirando primero a través del conjunto de archivos de encabezado que he incluido en el proyecto.Archivos de encabezado de MS Visual Studio Project

¿Alguien quiere comentar sobre la lógica que se está utilizando aquí?

Gracias, Travis

Respuesta

2

En realidad, la adición de sus archivos de cabecera en la carpeta llamada "Archivos de encabezado" es opcional. Incluso sin hacer lo mismo, puede especificar la ruta del encabezado en "Proyecto-> Propiedades-> ...." y seguirá funcionando.

Usted puede estar pensando solo en los archivos de encabezado de su proyecto que pueden agregarse en la carpeta "Archivos de encabezado", un gran proyecto que tiene varias bibliotecas de terceros, definitivamente no puede continuar agregando cada encabezado archivo en su carpeta.

Por lo tanto, para mantener todas las inclusiones unificadas en una configuración, esta debería haberse seleccionado.

Todo lo dicho anteriormente es solo mi comprensión. No tengo ninguna evidencia para apoyar esto. Entonces, Mis disculpas de antemano es que esto está mal. No me bombardees con Votos abajo por favor. :)

+0

Gracias Jay por su respuesta. Estoy de acuerdo en que los proyectos grandes aún requerirían la función "Proyecto-> Propiedades". Dicho esto, sigo pensando que el hecho de que el compilador del proyecto haga referencia automática a los archivos del encabezado del proyecto para la resolución #include es una función intuitiva que podría implementarse fácilmente sin entrar en conflicto con la necesidad de directorios externos adicionales. Reconozco cierta lógica en su argumento de que un mecanismo de configuración unificada es deseable. – Travis

+0

@Travis, si hubiera notado que puede agregar archivos de cualquier carpeta en su disco a la carpeta "Archivos de encabezado" en IDE. Además, en el archivo de origen a veces puede incluir el encabezado como "#include folder1/myheader.h" por varias razones. En este caso, debe indicar la ruta sin incluir la carpeta 1 en el compilador. Ahora, para que el IDE lo adivine, la estructura de la carpeta en el disco y el IDE debe mapearse, lo que traerá una restricción innecesaria en IDE. Dicho esto, si una característica más amigable para el usuario se incluye en el IDE como sugiere, sin duda la agradecería. :) – Jay

2

La búsqueda de archivos de encabezado debe ser determinista. Puede haber varios archivos con el mismo nombre en su proyecto. En ese caso, ¿cómo le gustaría que el compilador resolviera esta confusión?

Otra cosa es que tener directorios donde buscar archivos de encabezado es una característica histórica de (¿casi?) Todos los compiladores.

Esto te deja con el único uso de archivos de cabecera en tu proyecto de estudio visual: ser capaz de abrirlos fácilmente desde Visual Studio. Eso es !

+0

Gracias Benoit por tu respuesta. Aunque estoy de acuerdo con usted en que el único uso de los archivos de encabezado en un proyecto de VS parece ser fácil para abrirlos, creo que es posiblemente un error de diseño o al menos no intuitivo. Como mencioné en un comentario anterior, no estoy seguro de cuál es el propósito del filtro/carpetas de encabezado secundario si no se proporcionan espacios de nombres separados que imitan las rutas #include deterministas en el código fuente. En cualquier caso, agradezco su ayuda para ayudarme a comprender el paradigma de desarrollo de VS. – Travis

1

Antes que nada, ¿ha creado un nuevo proyecto de C/C++? Si es así, debería crear un directorio en el lugar que elija. Una vez hecho esto, puede hacer clic derecho en su proyecto (en la ventana de solución en MSVS) y agregar un nuevo archivo a su proyecto. Por ejemplo, puede agregar un archivo de origen (.cpp) y un archivo de encabezado (.h) al proyecto. Una vez hecho esto, debe escribir #include "yourfile.h" en su archivo fuente para poder incluir el archivo de encabezado en su archivo fuente. Tenga en cuenta que puede agregar nuevos archivos y archivos existentes. ¡Espero que esto ayude!

+0

Sí, he creado un proyecto de C/C++ pero lo hice usando el 'asistente de código existente'. Intentaba obtener una base de código fuente de terceros para compilar en Windows. Mi objetivo era NO tener que cambiar el código fuente ya que esta base de código ya está compilada en Linux y MacOS. Como tal, realmente no quería tener que cambiar las declaraciones #include. Gracias de todos modos por tu respuesta. – Travis

+0

No creo que tenga que cambiar ningún código ... Si crea un nuevo proyecto, simplemente necesita agregar los archivos existentes al proyecto y eso es todo. – Partial

3

Los archivos de proyecto son utilizados por el IDE para realizar un seguimiento de sus archivos, pero el compilador no tiene acceso a esa información. La ruta del archivo include se pasa a cada archivo fuente cuando se compila.

+0

Si bien la pregunta usa la frase "dile al compilador", está bastante claro por el contexto al que se refiere en la configuración del proyecto del IDE. No es raro (incluso si es impreciso, estrictamente hablando) llamar al IDE "el compilador". –

+0

Sí, gracias, estaba hablando del IDE. Como Entorno de Desarrollo Integrado, asumí que integraría los archivos del proyecto con el compilador, de modo que los detalles del procesamiento de la línea de comando quedarían en gran parte resumidos. Ahora comprendo que el IDE es en cierto modo un barniz bastante más delgado sobre el compilador de lo que esperaba. Gracias por responder. – Travis

3

Creo que es porque tener un encabezado en un directorio no significa necesariamente que desee que ese directorio busque otros encabezados. Ese encabezado particular podría incluirse especificando la ruta al encabezado, o podría encontrarse implícitamente porque está en el mismo directorio que el archivo que lo incluye.

Dicho todo esto (y es solo especulación), creo que lo que quiere es una solicitud razonable (es algo que me ha causado un poco de frustración antes), al menos como una opción o por una pregunta.

+0

Como dices, no es un problema importante una vez que se realizan las configuraciones adecuadas. Solo lo menciono porque parece un comportamiento tan fácil e intuitivo para que el IDE lo implemente. Si un desarrollador se toma la molestia de agregar archivos de inclusión al proyecto, el IDE, en mi opinión, debería considerarlos para cualquier declaración #include. Me di cuenta de que el IDE permite que las carpetas de subcabeceras (¿creo que las llama 'filtros'?) Se configuren para imitar la estructura de directorios que espera el código fuente. ¿Por qué hacer esto si la ruta completa debe especificarse en las propiedades del proyecto? De todos modos, gracias por tu respuesta. – Travis

0

nunca había visto este problema.una vez que haya creado un proyecto y agregado el mismo archivo de encabezado de carpeta de proyecto en IDE a su proyecto, puede agregar el archivo de encabezado por #include y compilar su código fuente. si el archivo de encabezado deseado no existe en la misma carpeta que usted crea su proyecto, debe agregar el directorio de encabezado en las propiedades del proyecto como dijo :)

Cuestiones relacionadas