2010-11-13 14 views
8

puedo construir todo el proyecto de MSBuild llamando desde la línea de comandos:MSBuild para compilar un solo archivo CPP

C:\MyProject>MSBuild MyProject.vcproj 

Sin embargo no he encontrado ninguna información sobre la compilación de un solo archivo. En esencia me gustaría hacer algo como

C:\MyProject>MSBuild MyProject.vcproj /t:Compile:MySourceFile.cpp 

no quiero utilizar directamente 'cl.exe' desde la línea de comandos, ya que me obligaría a definir todas las opciones de línea de comandos relevantes para cl.exe y todas las variables de entorno, una tarea que MSBuild ya está haciendo por mí.

¿Hay alguna manera de lograr eso?

Y por favor, no sugiera usar 'hacer' o 'ant' o lo que sea, específicamente necesito MSBuild. Gracias

+0

potencialmente interesantes [opciones con C#] (http://blogs.msdn.com /b/dotnetinterop/archive/2008/04/08/msbuild-script-for-compiling-all-cs-files-into-a-single-assembly-dll-or-exe.aspx) de un blog msdn. YMMV. – ruffin

Respuesta

8

MSBuild en VS2008 utiliza VCBuild para hacer el trabajo real, y VCBuild no tiene ninguna opción que conozca para compilar un único archivo. (con VS2010 esto ha cambiado, allí puede invocar una compilación de un solo archivo usando algo como "/t:ClCompile "p:/SelectedFiles="main.cpp")

Puedo encontrar algunas ideas que sin duda funcionarán, pero requieren un trabajo adicional y no son muy sencillas:

  • que pueda msbuild Tienes invocación devenv para compilar un solo archivo:

    devenv myproject.sln /Command "File.OpenFile myfile.cpp" /Command "Build.Compile" /Command "File.Exit" 
    

    esto hace abrir la ventana IDE sin embargo, y hará que sea muy difícil averiguar si la compilación de hecho tuvo éxito o no .

  • haga que msbuild invoque un script/programa que analice el vcproj y haga una copia con todas las fuentes en la sección del archivo de origen eliminada excepto ese archivo que desea compilar. Luego, haz que msbuild construya ese proyecto usando vcbuild/pass1 (pass1 = compile only, no link).

  • siempre mantenga un archivo de respuestas con las mismas opciones que vcproj y deje que msbuild invoque cl para compilar el único archivo, utilizando el archivo de respuestas. (Haciendo que el archivo de respuesta es tan simple como abrir las propiedades del proyecto en VS, ir a C++ -> CommandLine y la copia de todo lo que aparece)

Cuestiones relacionadas