Trabajar con configuraciones de proyecto

En el IDE, todas las opciones del compilador, las opciones del vinculador, la configuración del depurador y los pasos de compilación personalizada se exponen como propiedades. Utilice las páginas de propiedades de un proyecto para ver y modificar sus propiedades. Puede aplicar propiedades de proyecto independientemente de cualquier combinación de configuración de compilación (Debug o Release) y plataforma de destino (Win32, x64 o ARM). También puede establecer las propiedades de los archivos individuales de un proyecto.

Aunque puede establecer propiedades "globales" por usuario y equipo, este es un proceso que ya no se recomienda. Se recomienda que, en lugar de hacerlo de ese modo, utilice el Administrador de propiedades para crear una hoja de propiedades que almacenará los valores para cada tipo de proyecto que desee reutilizar o compartir con otros usuarios. Las hojas de propiedades también hacen menos probable que la configuración de propiedades a otros tipos de proyecto se modifique accidentalmente. Las hojas de propiedades se describen con mayor detalles más adelante en este artículo.

Para mostrar el Administrador de propiedades, en la barra de menús, elija Ver, Otras ventanas, Administrador de propiedades.

El sistema de proyectos de Visual C++ se basa en MSBuild. Aunque puede editar los archivos de proyecto y las hojas de propiedades XML directamente en la línea de comandos, recomendamos utilizar el IDE, sobre todo cuando modifique las propiedades que participan en la herencia. Un archivo editado de forma manual válido en MSBuild no es necesariamente legible en el sistema de proyectos de Visual C++, por lo que puede introducir errores imperceptibles en el proceso de compilación.

Un archivo de proyecto es un archivo XML con la extensión de nombre de archivo .vcxproj. Todas las propiedades que se establecen en el IDE se escriben en el archivo de proyecto directamente o en las hojas de propiedades que se importan en el tiempo de compilación.

La ilustración siguiente muestra las páginas de propiedades de un proyecto de Visual C++. Observe que en el panel izquierdo está seleccionada la regla Directorios de VC++ y que en el panel derecho se muestran las propiedades asociadas a esa regla. (Los valores $(...) son macros, que se abordarán más adelante en este artículo). Directorios de VC++ es una propiedad de configuración y sus valores pueden ser diferentes para las distintas configuraciones (por ejemplo, Debug frente a Release). Puede usar los cuadros de lista Configuración y Plataforma en la parte superior del cuadro de diálogo para establecer las configuraciones a las que se aplican las propiedades; en muchos casos Todas las plataformas y Todas las configuraciones son la opción correcta. Los valores de la regla Propiedades comunes se aplican a todas las configuraciones.

Páginas de propiedades del proyecto

Establecer propiedades para un proyecto

En general, aquí se describe cómo establecer las propiedades de un proyecto:

Para establecer una propiedad de un proyecto

  1. En la barra de menús, seleccione Proyecto, Propiedades. O, en el Explorador de soluciones o Administrador de propiedades, abra el menú contextual del proyecto y elija Propiedades. Se abrirá el cuadro de diálogo Páginas de propiedades.

  2. En los cuadros de la parte superior del cuadro de diálogo, seleccione las configuraciones y plataformas a las que desea que se aplique el valor.

    Para crear o modificar las configuraciones que aparecen en el cuadro Configuración, elija el botón Administrador de configuración.

  3. Establece el valor de propiedad. Cuando elige el botón Aceptar, el nuevo valor se escribe en el archivo del proyecto.

NotaNota

El cuadro Páginas de propiedades solo muestra las páginas de propiedades que se aplican al proyecto actual.Por ejemplo, si el proyecto no tiene un archivo .idl, la página de propiedades de MIDL no se muestra.

Más información sobre las propiedades del cuadro Páginas de propiedades:

SugerenciaSugerencia

Puede abrir una página de propiedades directamente si escribe su nombre en la ventana de Inicio rápido.

Propiedades codificadas frente a macros

Algunas propiedades de proyecto pueden tomar como valor una referencia a una propiedad definida en otro lugar. Este tipo de valor se conoce como macro para distinguirlo de otras clases de valores de propiedades de proyecto. Una macro puede hacer referencia a una propiedad definida por el sistema MSBuild o una que ha definido personalmente. Al utilizar macros en lugar de los valores incluidos en el código como, por ejemplo, rutas de directorio, le resultará más fácil compartir valores de propiedades entre máquinas y versiones de Visual Studio. Asimismo, podrá asegurarse de que la configuración del proyecto participa correctamente en la herencia de propiedades.

  • macros globales
    Se aplica a todos los elementos de una configuración de proyecto. Tiene la sintaxis $(name). Un ejemplo de una macro global es $(VCInstallDir), que almacena el directorio raíz de la instalación de Visual Studio. Una macro global corresponde a PropertyGroup en MSBuild.

  • macros de elemento
    Tiene la sintaxis %(name). Para un archivo, una macro de elemento solo se aplica a ese archivo; por ejemplo, puede utilizar %(AdditionalIncludeDirectories) para especificar directorios de inclusión que solo se aplican a un archivo determinado. Esta clase de macro de elemento corresponde a metadatos ItemGroup en MSBuild. Cuando se utiliza en el contexto de una configuración de proyecto, se aplica una macro de elemento a todos los archivos de un tipo determinado. Por ejemplo, la propiedad de configuración Definiciones de preprocesador de C/C++ puede tomar una macro del elemento %(PreprocessorDefinitions) que se aplica a todos los archivos .cpp del proyecto. Esta clase de macro de elemento corresponde a metadatos ItemDefinitionGroup en MSBuild. Para obtener más información, vea Definiciones de elementos.

Puede utilizar macros para definir valores de propiedad y puede usar el editor de propiedades para ver los valores de las macros disponibles.

Editor de propiedades

Puede utilizar el editor de propiedades para modificar determinadas propiedades de cadena y seleccionar macros como valores. Para tener acceso al editor de propiedades, seleccione una propiedad en una página de propiedades y elija el botón de flecha abajo de la derecha. Si la lista desplegable contiene <Editar>, podrá decidir si desea que muestre el editor de propiedades de dicha propiedad.

Property_Editor_Dropdown

En el editor de propiedades, puede elegir el botón Macros para ver las macros disponibles y sus valores actuales. La ilustración siguiente muestra el editor de propiedades para la propiedad Directorios de inclusión adicionales después de que se haya elegido el botón Macros. Cuando la casilla Heredar de primario o valores pred. del proyecto está seleccionada y agrega un nuevo valor, se anexa a cualquier valor que se está heredando actualmente. Si desactiva la casilla, el nuevo valor reemplaza los valores heredados. En la mayoría de los casos, deje la casilla activada.

Editor de propiedades, Visual C++

Compartir configuraciones de propiedad reutilizables

Si tiene un conjunto de propiedades común que usa con frecuencia y que desee aplicar a varios proyectos, puede usar el Administrador de propiedades para capturarlas en un archivo de hoja de propiedades reutilizable, que por convención tiene una extensión de nombre de archivo .props. Puede aplicar la hoja (u hojas) a nuevos proyectos para que no tenga que establecer sus propiedades desde cero. Para tener acceso al Administrador de propiedades, en la barra de menús, elija Ver, Administrador de propiedades.

Si elige Agregar nueva hoja de propiedades de proyecto y selecciona, por ejemplo, la hoja de propiedades MyProps.props, aparecerá un cuadro de diálogo de página de propiedades. Observe que se aplica a la hoja de propiedades MyProps; los cambios que realice se escriben en la hoja, no en el archivo de proyecto (.vcxproj).

Las propiedades en una hoja de propiedades se invalidan si la misma propiedad se establece directamente en el archivo .vcxproj.

Puede importar una hoja de propiedades con tanta frecuencia como sea necesaria. Varios proyectos de una solución pueden heredar valores de la misma hoja de propiedades y un proyecto puede tener varias hojas. Una hoja de propiedades en sí misma puede heredar la configuración de otra hoja de propiedades.

Nota importanteImportante

Los archivos .props no participan de forma predeterminada en el control de código fuente porque no se crean como elemento del proyecto.Puede agregar manualmente el archivo como elemento de la solución si desea incluirlo en el control de código fuente.

Para crear una hoja de propiedades

  1. En la barra de menús, elija Ver, Administrador de propiedades. Se abrirá el Administrador de propiedades.

  2. Para definir el ámbito de la hoja de propiedades, seleccione el elemento al que se aplica. Puede ser una configuración concreta u otra hoja de propiedades. Abra el menú contextual para este elemento y elija Agregar nueva hoja de propiedades de proyecto. Especifique un nombre y una ubicación.

  3. En el Administrador de propiedades, abra la nueva hoja de propiedades y establezca las propiedades que desea incluir.

Herencia de propiedad

Las propiedades de proyecto se dividen en capas. Cada capa hereda los valores de la capa anterior; sin embargo, un valor heredado puede invalidarse estableciendo la propiedad explícitamente. Este es el árbol básico de herencia:

  1. Configuración predeterminada del conjunto de herramientas de MSBuild CPP (..\Archivos de programa\MSBuild\Microsoft.Cpp\v4.0\Microsoft.Cpp.Default.props, que es la ruta que importa el archivo .vcxproj).

  2. Hojas de propiedades

  3. Archivo .vcxproj. (Puede invalidar la configuración predeterminada y de la hoja de propiedades).

  4. Metadatos de elemento

SugerenciaSugerencia

En una página de propiedades, una propiedad en bold se define en el contexto actual.Se hereda una propiedad en fuente normal.

Un archivo de proyecto (.vcxproj) importa otras hojas de propiedades en el tiempo de compilación. Después de importar todas las hojas de propiedades, el archivo del proyecto se evalúa y se usa la última definición de los valores de propiedades. En ocasiones, es útil ver el archivo expandido para determinar cómo se hereda un valor de propiedad especificado. Para ver la versión ampliada, escriba el siguiente comando en un símbolo del sistema de Visual Studio. (Cambie los nombres de archivo de marcador de posición a los que desea usar).

msbuild /pp:temp.txt myapp**.vcxproj**

Los archivos de proyecto expandidos pueden ser de gran tamaño y difíciles de comprender a menos que esté familiarizado con MSBuild. A continuación se muestra la estructura básica de un archivo de proyecto:

  1. Propiedades fundamentales del proyecto que no se exponen en el IDE.

  2. Importación de Microsoft.cpp.default.props, que define algunas propiedades básicas independientes del conjunto de herramientas.

  3. Página de propiedades de configuración global (expuestas como PlatformToolset y propiedades predeterminadas de Proyecto en la página Configuración general. Estas propiedades determinan qué conjunto de herramientas y hojas de propiedades intrínsecas se importan en Microsoft.cpp.props en el paso siguiente.

  4. Importación de Microsoft.cpp.props, que establece la mayoría de los valores predeterminados del proyecto.

  5. Importación de todas las hojas de propiedades, incluidos los archivos .user. Estas hojas de propiedades pueden reemplazar todo excepto las propiedades predeterminadas PlatformToolset y Project.

  6. El resto de propiedades de configuración del proyecto. Estos valores pueden invalidar lo que estaba establecido en las hojas de propiedades.

  7. Elementos (archivos), junto con sus metadatos. Estas son siempre la última palabra en las reglas de evaluación de MSBuild, aunque se produzcan antes de otras propiedades e importaciones.

Para obtener más información, vea Propiedades de MSBuild.

Archivos .user y razones por las que son problemáticos

Las versiones anteriores de Visual Studio usaban hojas de propiedades globales que tenían una extensión de nombre de archivo .user y se encontraban en la carpeta <PerfilUsuario>\AppData\Local\Microsoft\MSBuild\v4.0\. Ya no recomendamos estos archivos porque establecen propiedades para configuración de proyecto por usuario y por equipo. Estos valores "globales" pueden interferir con las compilaciones, especialmente cuando tenga como destino varias plataformas en el equipo de compilación. Por ejemplo, si tiene un proyecto MFC y un proyecto de Windows Phone, las propiedades .user no serían válidas para uno de ellos. Las hojas de propiedades reutilizables son más flexibles y más eficaces.

Aunque los archivos .user todavía se instalan con Visual Studio y participan en la herencia de propiedades, están vacíos de forma predeterminada. El procedimiento recomendado es eliminar la referencia a ellos en Administrador de propiedades para asegurarse de que los proyectos funcionan independientemente de cualquier configuración por usuario y por equipo. Esto es importante para asegurar un comportamiento correcto en un entorno SCC (control de código fuente).

Adición de un directorio de inclusión al conjunto de directorios predeterminados

Cuando agrega un directorio de inclusión a un proyecto, es importante no invalidar todos los directorios predeterminados. La forma correcta de agregar un directorio es anexar la nueva ruta de acceso, por ejemplo "C:\MyNewIncludeDir\", y luego anexar la macro $(IncludePath) al valor de propiedad.

Creación de una macro definida por el usuario

Puede crear macros definidas por el usuario para usarlas como variables en compilaciones de proyectos. Por ejemplo, puede crear una macro definida por el usuario que proporcione un valor a un paso de compilación personalizada o a una herramienta de compilación personalizada. Una macro definida por el usuario es un par de nombre y valor. En un archivo de proyecto, use la notación $(name) para obtener acceso al valor.

La macro definida por el usuario se almacena en una hoja de propiedades. Si el proyecto aún no contiene una hoja de propiedades, puede crear una siguiendo los pasos descritos anteriormente en este artículo.

Para crear una macro definida por el usuario

  1. En la ventana Administrador de propiedades (en la barra de menús, elija Ver, Administrador de propiedades), abra el menú contextual para una hoja de propiedades (su nombre termina en .user) y elija Propiedades. Se abre el cuadro de diálogo Páginas de propiedades para la hoja de propiedades.

  2. En el panel izquierdo del cuadro de diálogo, seleccione Macros de usuario. En el panel derecho, elija el botón Agregar macro para abrir el cuadro de diálogo Agregar macro de usuario.

  3. En el cuadro de diálogo, especifique un nombre y un valor para la macro. Opcionalmente, active la casilla Establecer esta macro como variable de entorno en el entorno de compilación.

Establecer variables de entorno para una compilación

El compilador de Visual C++ (cl.exe) reconoce determinadas variables de entorno, en concreto LIB, LIBPATH, PATH e INCLUDE. Al compilar con el IDE, las propiedades establecidas en la página de propiedades Directorios de VC++ (Página de propiedades) se utilizan para establecer esas variables de entorno. Si los valores LIB, LIBPATH e INCLUDE se han definido, por ejemplo mediante el símbolo del sistema del desarrollador, estos se reemplazarán por los valores de las propiedades de MSBuild correspondientes. La compilación luego antepone el valor de la propiedad de directorios ejecutable de los directorios VC++ en PATH. Puede establecer una variable de entorno definida por el usuario creando una macro definida por el usuario y activando la casilla Establecer esta macro como variable de entorno en el entorno de compilación.

Establecimiento de variables de entorno para una sesión de depuración

En el panel izquierdo del cuadro de diálogo Páginas de propiedades del proyecto, expanda Propiedades de configuración y, a continuación, seleccione Depuración.

En el panel derecho, modifique las opciones Entorno o Combinar entorno del proyecto y elija el botón Aceptar.

Visualización de todas las macros y sus valores

En el cuadro Páginas de propiedades de un proyecto, seleccione una propiedad de cadena, como Directorios de VC++, elija el botón de flecha debajo de la columna derecha y elija <Editar> para abrir el editor de propiedades. En el editor de propiedades, elija el botón Macros.

Establecimiento de propiedades para varias configuraciones simultáneamente

Para establecer propiedades para todas las configuraciones, en los cuadros de la parte superior del cuadro de diálogo Páginas de propiedades de un proyecto, seleccione Todas las configuraciones y Todas las plataformas y establezca las propiedades que desee.

Para establecer las propiedades solo para algunas configuraciones, realice una selección múltiple de ellas en Administrador de propiedades y, a continuación, abra el menú contextual y elija Propiedades. Cualquier valor que cambie se aplica a todas las configuraciones seleccionadas.

También puede crear una hoja de propiedades para varias configuraciones. Para ello, cree una hoja de propiedades para cada configuración, abra el menú contextual para una de ellos, elija Agregar hoja de propiedades existente y, a continuación agregue las demás hojas. Sin embargo, si utiliza una hoja de propiedades comunes, tenga en cuenta que, cuando se establece una propiedad, obtiene el conjunto de todas las configuraciones a las que se aplica la hoja y el IDE no muestra los proyectos u hojas de propiedades que heredan valores de una hoja de propiedades determinada.

En soluciones grandes que tendrán muchos proyectos, puede ser útil crear una hoja de propiedades en el nivel de solución. Al agregar un proyecto a la solución, use el Administrador de propiedades para agregar dicha hoja de propiedades al proyecto. Si se solicita en el nivel de proyecto, puede agregar una nueva hoja de propiedades para establecer valores específicos del proyecto.

Para examinar y buscar rápidamente todas las opciones

La página de propiedades Todas las opciones (bajo el nodo C/C++ del panel izquierdo del cuadro Páginas de propiedades) proporciona una forma rápida de explorar y buscar las propiedades disponibles en el contexto actual. Tiene un cuadro de búsqueda especial y una sintaxis simple para ayudarle a filtrar los resultados:

  • Ningún prefijo:
    Busque solo en los nombres de propiedad (subcadena sin distinción entre mayúsculas y minúsculas).

  • '/' o bien '-':
    Buscar solo en modificadores de compilador (prefijo sin distinción entre mayúsculas y minúsculas)

  • v:
    Busque solo en los valores (subcadena sin distinción entre mayúsculas y minúsculas).

Vea también

Otros recursos

Creación y administración de proyectos de Visual C++