2011-08-01 27 views
45

Tengo una biblioteca y una aplicación de consola que usa una biblioteca. La biblioteca tiene una carpeta con archivos fuente y encabezado.¿Cómo se definen las rutas relativas en Visual Studio Project?

Mi proyecto está en un directorio secundario/interno pero ese directorio de biblioteca que quiero incluir está en un directorio padre/superior.

Mi directorio del proyecto:

H:\Gmail_04\gsasl-1.0\lib\libgsaslMain 

incluye archivos está aquí:

H:\Gmail_04\gsasl-1.0\src 

¿Cómo puedo utilizar rutas relativas al directorio del proyecto, para incluir carpetas que se encuentran en un directorio padre/superior?

Respuesta

35

Si consigo que la derecha, es necesario ..\..\src

+5

Intenté esto ... pero dice que no puedo encontrar el archivo de inclusión que está en esta carpeta. pero cuando doy el camino completo funciona bien. –

+0

¿Tal vez el directorio del proyecto no es lo que crees que es? tal vez es un paso más profundo? – MByD

+1

si este es el caso, ¿qué debo hacer? ¿Cuál debería ser la ruta si tiene razón sobre el directorio del proyecto? –

111

En lugar de utilizar rutas relativas, se podría también utilizar las macros predefinidas de VS para lograrlo.

$(ProjectDir) apunta al directorio de su archivo .vcproj, $(SolutionDir) es el directorio del archivo .sln.

Se obtiene una lista de macros disponibles al abrir un proyecto, vaya a
Propiedades → Propiedades de configuración →   C/C++ → general
y golpear a los tres puntos:

project properties

En el siguiente cuadro de diálogo, marque Macros para ver las macros predefinidas por Studio (consulte MSDN por su significado):

additional include directories

Usted puede utilizar las macros escribiendo $(MACRO_NAME) (nótese el $ y la ronda paréntesis).

+3

Tenga en cuenta que estos son ** corchetes redondos() **, _not_ curvy llaves {}. He estado tratando erróneamente de utilizar macros con este último durante quince minutos. – hauzer

+1

@hauzer: gracias por la pista. Incorporé tu comentario en mi respuesta. – eckes

+1

Su tema es tan oscuro –

14

he utilizado una sintaxis como esto antes:

$(ProjectDir)..\headers 

o

..\headers 

Como otros han señalado, el directorio de partida es el archivo de proyecto está en (vcproj o vcxproj) , no donde se encuentra tu código principal.

+0

Parece que funciona bien en VS2013 Actualización 3 nuevamente, no estoy seguro acerca de U2 y U1. – iFreilicht

+7

¿No debería ($ ProjectDir) ser $ (ProjectDir)? –

-1

En Visual Studio 2013 puede ver las propiedades de cualquier archivo de origen. Haga clic en el archivo a través de la solución Explorer.

Una de esas propiedades es "Relative Path".

+1

no esta opción no está allí – JerryGoyal

2

De forma predeterminada, todas las rutas que defina serán relativas. La pregunta es: ¿en relación a qué? Hay varias opciones: 1. Especificando un archivo o una ruta sin nada antes.Por ejemplo: "mylib.lib". En ese caso, el archivo se buscará en el Output Directory. Sin embargo, si agrega ".. \", la ruta se calculará a partir de la ruta real donde reside el archivo .sln. Tenga en cuenta que al seguir una macro como $ (SolutionDir) no es necesario agregar una barra invertida "\". Simplemente use $ (SolutionDir) mylibdir \ mylib.lib. En caso de que no pueda hacer que funcione, abra el archivo de proyecto externamente desde el Bloc de notas y verifíquelo.

Cuestiones relacionadas