2008-09-09 5 views
11

¿Alguien tiene experiencia usando makefiles para compilaciones de Visual Studio C++ (en VS 2005) en lugar de usar la configuración de proyecto/solución. Para nosotros, la forma en que funcionan los proyectos/soluciones no es intuitiva y lleva a una explosión de configuración cuando intenta modificar las compilaciones con indicadores de tiempo de compilación específicos.Usando Makefile en lugar de archivos de Solución/Proyecto bajo Visual Studio (2005)

En Unix, es bastante fácil configurar un archivo MAKE que tiene sus opciones predeterminadas anuladas por la configuración del usuario (u otra configuración). Pero hacer este tipo de cosas parece difícil en Visual Studio.

A modo de ejemplo, tenemos un proyecto que necesita obtener compilación para 3 plataformas diferentes. Cada plataforma puede tener varias configuraciones (por ejemplo, depuración, versión y muchas otras). Uno de mis objetivos en un proyecto recién formado es tener una solución que pueda reunir a todos los desarrolladores de plataforma, lo que facilita la creación y prueba de cambios de código ya que no tiene que abrir 3 soluciones diferentes solo para probar su código. Pero visual studio requerirá configuraciones de 3 * (número de configuraciones base). es decir, PC Debug, X360 Debug, PS3 Debug, etc.

Parece que una solución de archivo MAKE es mucho mejor aquí. Envuelto con algunos archivos de proceso por lotes básicos o scripts, sería fácil mantener la explosión de la configuración al mínimo y solo mantener un pequeño conjunto de archivos para todas las versiones diferentes que tenemos que hacer.

Sin embargo, no tengo experiencia con los archivos make en Visual Studio y me gustaría saber si otros tienen experiencias o problemas que pueden compartir.

Gracias.

(Mensaje editado mencionar que estos son C++ construye)

Respuesta

5

he encontrado algunas ventajas a los archivos make con grandes proyectos, principalmente relacionado con unificar la ubicación de la configuración del proyecto. Es algo más fácil administrar la lista de archivos fuente, incluir rutas, definir el preprocesador, etc., si están todos en un archivo makefile u otro archivo de configuración de compilación. Con múltiples configuraciones, agregar una ruta de inclusión significa que debe asegurarse de actualizar todas las configuraciones manualmente a través de las propiedades de proyecto de Visual Studio, lo que puede ser muy tedioso a medida que crece el tamaño del proyecto.

Los proyectos que usan muchas herramientas de compilación personalizadas también pueden ser más fáciles de administrar, como si necesita compilar sombreadores de píxel/vértice o código en otros idiomas sin soporte VS nativo.

Sin embargo, deberá tener varias configuraciones de proyecto diferentes, ya que deberá diferenciar la invocación de la herramienta de compilación para cada configuración (por ejemplo, pasar diferentes opciones de línea de comando).

inconvenientes inmediatos que vienen a la mente:

  • lento construye: VS no es particularmente rápido en la invocación de herramientas externas, o incluso hacer ejercicio si se necesita para construir un proyecto en el primer lugar.
  • Dependeciones interproceso incómodas: Es complicado configurarlo de modo que una depende hace que el proyecto base se construya, y más fiddlier para asegurarse de que se construyan en el orden correcto. Logré que SCons consiguiera algo de éxito, pero siempre es un desafío trabajar bien.
  • Pérdida de algunas características útiles de IDE: Editar & ¡Sigue siendo el principal!

En resumen, pasará menos tiempo administrando las configuraciones de su proyecto, pero más tiempo persuadiendo a Visual Studio para que funcione correctamente con él.

+1

Como dije en otro comentario, MSVS es solo una gran envoltura sobre los archivos de MSBuild. Puede usar estos archivos directamente sin tocar IDE. Te animo a aprender más sobre MSBuild – aku

2

Visual Studio se está construyendo en la parte superior de los archivos MSBuild configuraciones. Puede considerar los archivos * proj y * sln como archivos make. Permiten personalizar completamente el proceso de compilación.

0

Puede usar nant para compilar los proyectos individualmente, reemplazando así la solución y tener 1 solución de codificación y ninguna solución de compilación.

Lo que hay que tener en cuenta es que los archivos de solución y csproj de vs 2005 son scripts de msbuild. Por lo tanto, si se familiariza con msbuild, es posible que pueda manejar los archivos existentes, hacerlos más fáciles y facilitar su implementación.

1

Si bien es técnicamente posible, no es una solución muy amigable dentro de Visual Studio. Te pelearé todo el tiempo.

Te recomiendo que eches un vistazo a NAnt. Es un sistema de construcción muy robusto donde puedes hacer básicamente todo lo que necesites.

guión Nuestra Nant hace esto en cada generación:

  1. migrar la base de datos para la versión más reciente
  2. Generar entidades C# fuera de la base de datos
  3. Compilar todos los proyectos de nuestra solución "maestro"
  4. Ejecutar todo
  5. unidad de prueba
  6. ejecutar todas las pruebas de integración

Además, nuestro servidor de compilación aprovecha esto y agrega 1 tarea más, que genera la documentación de Sandcastle.

Si no te gusta XML, también puede echar un vistazo a Rake (rubí), Bake/BooBuildSystem (Boo), o Psake (PowerShell)

0

Tenemos una configuración similar a la que está describiendo. Admitimos al menos 3 plataformas diferentes, por lo que encontramos que al usar CMake se manejan las diferentes soluciones de Visual Studio. La configuración puede ser un poco dolorosa, pero básicamente se reduce a leer los documentos y un par de tutoriales. Debería poder hacer prácticamente todo lo que puede hacer yendo a las propiedades de los proyectos y la solución. No estoy seguro de si puede hacer que las tres plataformas funcionen juntas en la misma solución, pero puede usar CruiseControl para encargarse de sus compilaciones y ejecutar las secuencias de prueba tantas veces como sea necesario.

Cuestiones relacionadas