2009-01-27 8 views
18

Necesito crear una versión de demostración de una aplicación grande existente que consta de varios proyectos. Me gustaría utilizar los proyectos existentes, y simplemente neutro de la funcionalidad a través de directivas de preprocesadorDefina un valor de preprocesador desde la línea de comandos utilizando MSBuild

#if DEMO 
    mycode.NeuterNow(); 
#endif 

Estamos construyendo nuestra aplicación utilizando MSBuild, y lo ideal sería que iba a usar algo en la línea de:

MSBuild -DefineProperty:DEMO MySolution.sln 

¿Existe tal funcionalidad?

Respuesta

9

That's a duplicate of this one, y sí,/p: DefineConstants funciona bien, y el configurador es correcto, esto anulará TODOS los símbolos condicionales ya definidos en el Archivo de proyecto (que es bueno en mi humilde opinión), así que tendrá que definirlos todos .

+0

¿Hay alguna manera de no anular? – Tsury

14

Trate

msbuild /p:DefineConstants=DEBUG;DEMO MySolution.sln 

Tienes que incluir depuración o liberación y cualesquiera otras constantes ya definido en el archivo de solución, pero creo que esto debería funcionar. Descargo de responsabilidad: nunca lo he probado yo mismo.

+0

/p: DefineConstants = DEMO el segundo ":" debe ser un "=" – BrianH

+0

Gracias, he reparado la respuesta. – configurator

3

Descubrí algo interesante al buscar mi propia solución a este problema y pensé que lo compartiría.

La directiva/p en MSBuild no se limita a las propiedades que ya existen en un archivo de compilación. Puedes usarlo para establecer cualquier cosa.

Así que si, por ejemplo, a llevar sus directivas del preprocesador con $ (FeatureSet) y luego llamar a MSBuild como, por ejemplo

MSBuild solution.sln /p:FeatureSet=DEMO 

que se #defined en consecuencia, sin tener que darle una paliza a especificar y cualquier otro preprocesador manualmente directivas que tiene en ejecución.

He verificado que esto funciona en VS2010. No estoy tan seguro de cómo definiría FeatureSet para una compilación realizada dentro de Visual Studio sin MSBuild.

+1

¿Puede darme un ejemplo completo de esto? No puedo entender cómo hacerlo exactamente ... – ChrFin

+0

Una vez más, esto es solo VS2010. No sé sobre versiones posteriores. Las directivas de preprocesador son una lista de elementos separados por punto y coma en las propiedades de su proyecto, en configuración - C++ - preprocesador. Agregue manualmente $ (Variable) a la lista, luego, cuando llame a MSBuild desde la línea de comando, puede establecer/p: Variable = FOO y cosas como #ifdef FOO responderán a él. – Glazius

Cuestiones relacionadas