VCBuild frente a MSBuild: cambios en el sistema de compilación en Visual Studio 2010

El sistema MSBuild para proyectos de C++ se introdujo en Visual Studio 2010. En Visual Studio 2008 y versiones anteriores, se utilizaba el sistema VCBuild. Ciertos conceptos y tipos de archivo que dependían de VCBuild no existen o se representan de forma distinta en MSBuild. En este documento se describen las diferencias introducidas en el sistema de compilación actual. Para convertir un proyecto de Visual Studio 2008 a MSBuild, debe usar Visual Studio 2010. Una vez convertido el proyecto, debe usar la versión más reciente de Visual Studio para actualizar al IDE actual y el conjunto de herramientas del compilador. Para obtener más información, incluido cómo obtener Visual Studio 2010, consulte Instrucciones para Visual Studio 2008.

En las secciones siguientes se resumen los cambios entre VCBuild y MSBuild. Si el proyecto de VCBuild tiene reglas de compilación personalizadas o macros que MSBuild no reconoce, consulte Proyectos de Visual Studio: C++ para obtener información sobre cómo traducir esas instrucciones al sistema MSBuild. La conversión inicial de VCBuild a MSBuild es simplemente un paso intermedio. No es necesario obtener el archivo del proyecto completamente correcto u lograr que el programa compile sin errores. Solo usa Visual Studio 2010 para convertir el proyecto al formato MSBuild, de modo que el proyecto funcione en la versión más reciente de Visual Studio.

.vcproj ahora es .vcxproj

Para los archivos de proyecto ya no se usa la extensión de nombre de archivo .vcproj. Visual Studio 2010 convierte automáticamente los archivos de proyecto creados por una versión anterior de Visual C++ al formato MSBuild, que usa la extensión .vcxproj para los archivos de proyecto.

.vsprops ahora es .props

En Visual Studio 2008 y versiones anteriores, la hoja de propiedades del proyecto era un archivo basado en XML que tenía una extensión de nombre de archivo .vsprops. En la hoja de propiedades del proyecto se pueden especificar los modificadores para las herramientas de compilación, como el compilador o enlazador, y crear macros definidas por el usuario. En MSBuild, la extensión de nombre de archivo de la hoja de propiedades de proyecto es .props.

Reglas de compilación personalizada y archivos .rules

En Visual Studio 2008 y versiones anteriores, un archivo de reglas era un archivo basado en XML que tenía una extensión de nombre de archivo .rules. Los archivos de reglas permiten definir reglas de compilación personalizada e incorporarlas en el proceso de compilación de un proyecto de Visual Studio C++. Las reglas de compilación personalizada, que pueden asociarse con una o varias extensiones de nombre de archivo, permiten pasar archivos de entrada a una herramienta que crea uno o varios archivos de salida.

En el sistema MSBuild, las reglas de compilación personalizada se representan mediante tres tipos de archivo (.xml, .props y .targets), en vez de hacerlo con un archivo .rules. Cuando un archivo .rules creado con una versión anterior de Visual C++ se migra a Visual Studio 2010 se crean los archivos .xml, .props y .targets equivalentes y se almacenan en el proyecto junto con el archivo .rules original.

Importante

En Visual Studio 2010, el IDE no admite la creación de reglas nuevas. Por ese motivo, la forma más fácil de usar un archivo de reglas de un proyecto creado con una versión anterior de Visual C++ es migrar el proyecto a Visual Studio 2010.

Macros de herencia

En Visual Studio 2008 y versiones anteriores, la macro $(Inherit) especifica el orden en que aparecen las propiedades heredadas en la línea de comandos compuesta por el sistema de compilación del proyecto. La macro $(NoInherit) hace que las apariciones de $(Inherit) se ignoren y que cualquier propiedad que en otras circunstancias se heredaría, no se pueda heredar. Por ejemplo, de forma predeterminada, la macro $(Inherit) hace que los archivos especificados utilizando la opción del compilador /I (Additional Include Directories) se anexe a la línea de comandos.

En Visual Studio 2010, se admite la herencia mediante la especificación del valor de una propiedad como la concatenación de una o más macros de propiedades y valores literales. Las macros $(Inherit) y $(NoInherit) no se admiten.

En el ejemplo siguiente, se asigna una lista delimitada por punto y coma a una propiedad de la página de propiedades. La lista consiste en la concatenación del literal <value> y del valor de la propiedad MyProperty, a la que se accede mediante la notación de macro $(MyProperty).

Property=<value>;$(MyProperty)

.vcxproj.user files

Los archivos de usuario (. vcxproj.user) almacenan propiedades específicas del usuario, como los valores de depuración e implementación. El archivo vcxproj.user se aplica a todos los proyectos de un usuario concreto.

.vcxproj.filters file

Cuando se usa el Explorador de soluciones para agregar un archivo a un proyecto, el archivo de filtros (.vcxproj.filters) define dónde se agrega el archivo en la vista de árbol del Explorador de soluciones en función de su extensión de nombre de archivo.

Configuración de directorios de VC++

La configuración de directorios de Visual C++ se especifican en la página de propiedades de los directorios de Visual C++. En Visual Studio 2008 y versiones anteriores, la configuración de directorios se aplica por usuario y la lista de directorios excluidos se especifica en el archivo sysincl.dat.

No puede cambiar la configuración de los directorios de Visual C++ ejecutando devenv /resetsettings en la línea de comandos. Tampoco puede cambiarla si abre el menú Herramientas, hace clic en Configuraciones de importación y exportación y selecciona la opción Restablecer todas las configuraciones.

Para migrar la configuración de directorios de VC++ desde un archivo .vssettings creado mediante una versión anterior de Visual Studio:

  1. Abra el menú Herramientas, haga clic en Importar y exportar configuraciones
  2. Seleccione Importar la configuración del entorno seleccionada
  3. Siga las instrucciones del asistente.

Consulte también

MSBuild on the Command Line - C++ (MSBuild en la línea de comandos - C++)