visual c ++: #incluir archivos de otros proyectos en la misma solución

113

Estoy trabajando en un juego que usa Visual C ++. Tengo algunos componentes en proyectos separados y he establecido las dependencias del proyecto. ¿Cómo #incluyo un archivo de encabezado de un proyecto diferente? No tengo idea de cómo usar las clases de un proyecto en otro.

rlbond
fuente

Respuestas:

199

Configuración del compilador

En el proyecto en el que desea #incluir el archivo de encabezado de otro proyecto, deberá agregar la ruta del archivo de encabezado en la sección Directorios de inclusión adicionales en la configuración del proyecto.

Para acceder a la configuración del proyecto:

  1. Haga clic con el botón derecho en el proyecto y seleccione Propiedades.
  2. Seleccione Propiedades de configuración-> C / C ++ -> General.
  3. Establezca la ruta en Directorios de inclusión adicionales.

Como incluir

Para incluir el archivo de encabezado , simplemente escriba lo siguiente en su código:

#include "filename.h"

Tenga en cuenta que no es necesario que especifique la ruta aquí, porque ya incluye el directorio en los directorios de inclusión adicionales, por lo que Visual Studio sabrá dónde buscarlo.

Si no desea agregar cada ubicación de archivo de encabezado en la configuración del proyecto, puede incluir un directorio hasta un punto, y luego #incluir relativo a ese punto:

// In project settings
Additional Include Directories    ..\..\libroot

// In code
#include "lib1/lib1.h"    // path is relative to libroot
#include "lib2/lib2.h"    // path is relative to libroot

Configuración para enlazador

Si usa bibliotecas estáticas (es decir, archivo .lib), también deberá agregar la biblioteca a la entrada del vinculador, de modo que en el momento del enlace los símbolos se puedan vincular (de lo contrario, obtendrá un símbolo sin resolver):

  1. Haga clic con el botón derecho en el proyecto y seleccione Propiedades.
  2. Seleccione Propiedades de configuración-> Vinculador-> Entrada
  3. Ingrese a la biblioteca en Dependencias adicionales.
Leopardopielpíldoracajasombrero
fuente
6
Permítanme decirles que después de una mañana de leer las respuestas sobre este tema en SO, las suyas de la manera más clara y completa que he encontrado. ¡Bien hecho y gracias!
David Hall
9
Hubo una sugerencia de un usuario anónimo como, "Cuando incluya la ruta de la biblioteca, asegúrese de ingresarla entre comillas si la ruta tiene espacios". Agregarlo como comentario, si ayuda a alguien.
iDev
2
Una forma adicional de incluir una biblioteca estática es, dentro de las "dependencias del proyecto" de la solución, configurar el proyecto para que sea una dependencia de la biblioteca estática a la que se vinculará. Me tomó mucho tiempo averiguar por qué uno de mis proyectos se vinculaba correctamente y el otro no, por eso.
Stuart Wood
3
Me gustaría señalar que usar "Directorios de inclusión adicionales" con el directorio de archivos fuente del otro proyecto puede ser una idea terrible. El otro proyecto puede tener archivos con los mismos nombres (muy probablemente si está usando encabezados precompilados para cada uno). Personalmente, prefiero agregar la carpeta principal de los archivos fuente del proyecto, para que al menos pueda especificar usted mismo, por ejemplo #include "proj2\include.h". Tener varios proyectos por solución parece muy dirigido a los lenguajes NET, ya que se usan de manera muy diferente. Sin embargo, para encontrar una excelente manera de superar esto para los proyectos de C ++.
Deji
18
Esto es un poco de mala calidad. VS puede hacer muchas cosas automáticamente. Es difícil de creer que no haya una solución mejor en comparación con la codificación rígida de la ruta: la configuración de dependencia del proyecto o similar podría ser agradable.
Cookie
4

#includeno tiene nada que ver con los proyectos, solo le dice al preprocesador "ponga aquí el contenido del archivo de encabezado". Si le da una ruta que apunte a la ubicación correcta (puede ser una ruta relativa, como ../your_file.h), se incluirá correctamente.

Sin embargo, tendrá que aprender sobre las bibliotecas (bibliotecas estáticas / dinámicas) para hacer que dichos proyectos se vinculen correctamente, pero esa es otra cuestión.

Assaf Lavie
fuente
3

Dado que ambos proyectos están bajo la misma solución, hay una forma más sencilla de incluir archivos y enlazador como se describe en https://docs.microsoft.com/en-us/cpp/build/adding-references-in-visual-cpp- proyectos? view = vs-2019 :

  1. La inclusión se puede escribir en una ruta relativa (por ejemplo #include "../libProject/libHeader.h").
  2. Para el vinculador, haga clic con el botón derecho en "Referencias", haga clic en Agregar referencia y elija el otro proyecto.
Benav
fuente
Agradable y simple, pero es una lástima que se necesite la ruta relativa en todos los lugares en los que incluya un encabezado.
yoyo
2

Debe establecer la ruta a los encabezados en las propiedades del proyecto para que el compilador busque allí cuando intente encontrar el (los) archivo (s) de encabezado. No recuerdo la ubicación exacta, pero mire las propiedades del proyecto y debería verlo.

Rosstificado
fuente
La ubicación puede estar en Propiedades> C / C ++> General> Directorios de inclusión adicionales.
Mustafa Kemal
0

Intente evitar referencias de ruta completas en la directiva #include, ya sean absolutas o relativas. En su lugar, agregue la ubicación de la carpeta de inclusión del otro proyecto en la configuración de su proyecto. Utilice solo subcarpetas en las referencias de ruta cuando sea necesario. De esa manera, es más fácil mover las cosas sin tener que actualizar su código.

cdonner
fuente
0

Ampliando la respuesta de @ Benav, mi enfoque preferido es:

  1. Agregue el directorio de la solución a sus rutas de inclusión:
    • haga clic derecho en su proyecto en el Explorador de soluciones
    • seleccione Propiedades
    • seleccione Todas las configuraciones y Todas las plataformas en los menús desplegables
    • seleccione C / C ++> General
    • agregar $(SolutionDir)a los directorios de inclusión adicionales
  2. Agregue referencias a cada proyecto que desee utilizar:
    • haga clic derecho en las referencias de su proyecto en el Explorador de soluciones
    • seleccione Agregar referencia ...
    • seleccione el (los) proyecto (s) que desea consultar

Ahora puede incluir encabezados de sus proyectos referenciados así:

#include "OtherProject/Header.h"

Notas:

  • Esto supone que su archivo de solución se almacena en una carpeta de cada uno de sus proyectos, que es la organización predeterminada al crear proyectos con Visual Studio.
  • Ahora puede incluir cualquier archivo de una ruta relativa a la carpeta de la solución, lo que puede no ser deseable, pero por la simplicidad del enfoque, estoy de acuerdo con esto.
  • El paso 2 no es necesario para #includes, pero establece las dependencias de compilación correctas, que probablemente desee.
yoyó
fuente