Pregunta

[NOTA: esta pregunta es similar pero no es la misma que este .]

Visual Studio define varias docenas de "macros" que son una especie de variables de entorno simuladas (completamente ajenas a las macros de C ++) que contienen información sobre la compilación en curso. Ejemplos:

    ConfigurationName  Release
    TargetPath         D:\work\foo\win\Release\foo.exe
    VCInstallDir       C:\ProgramFiles\Microsoft Visual Studio 9.0\VC\

Aquí veo el conjunto completo de 43 Macros integradas que veo (la suya puede variar según la versión de VS que use y las herramientas que haya habilitado):

    ConfigurationName  IntDir           RootNamespace      TargetFileName
    DevEnvDir          OutDir           SafeInputName      TargetFramework
    FrameworkDir       ParentName       SafeParentName     TargetName
    FrameworkSDKDir    PlatformName     SafeRootNamespace  TargetPath
    FrameworkVersion   ProjectDir       SolutionDir        VCInstallDir
    FxCopDir           ProjectExt       SolutionExt        VSInstallDir
    InputDir           ProjectFileName  SolutionFileName   WebDeployPath
    InputExt           ProjectName      SolutionName       WebDeployRoot
    InputFileName      ProjectPath      SolutionPath       WindowsSdkDir
    InputName          References       TargetDir          WindowsSdkDirIA64
    InputPath          RemoteMachine    TargetExt             

De estos, solo cuatro ( FrameworkDir , FrameworkSDKDir , VCInstallDir y VSInstallDir ) están configurados en el entorno utilizado para eventos de compilación.

Como Brian menciona, las Macros definidas por el usuario se pueden definir de modo que se establezcan en el entorno en el que se ejecutan las tareas de compilación. Mi problema es con las macros integradas.

Uso un evento posterior a la compilación de Visual Studio para ejecutar un script de Python como parte de mi proceso de compilación. Me gustaría pasar todo el conjunto de macros (integradas y definidas por el usuario) a mi script en el entorno, pero no sé cómo. Dentro de mi script puedo acceder a variables de entorno regulares (por ejemplo, Path, SystemRoot) pero NO a estas '' Macros ''. Todo lo que puedo hacer ahora es pasarlos uno por uno como opciones con nombre que luego procesaré dentro de mi script. Por ejemplo, así es como se ve mi línea de comando de evento posterior a la compilación:

    postbuild.py --t="$(TargetPath)" --c="$(ConfigurationName)"

Además de ser un dolor en el cuello, hay un límite en el tamaño de la línea de comando del Evento posterior a la construcción, por lo que no puedo pasar docenas de Macros usando este método, incluso si quisiera porque la línea de comando está truncada.

¿Alguien sabe si hay una manera de pasar todo el conjunto de nombres y valores de Macro a un comando que NO requiere cambiar a MSBuild (que creo que no está disponible para VC ++ nativo) o alguna otra herramienta de creación similar ?

¿Fue útil?

Solución 3

Por lo que puedo decir, el método descrito en la pregunta es la única forma de pasar variables de compilación a un script de Python.

¿Quizás Visual Studio 2010 tiene algo mejor?

Otros consejos

Es posible que desee consultar PropertySheets. Estos son archivos que contienen configuraciones de Visual C ++, incluidas las macros de usuario. Las hojas pueden heredarse de otras hojas y se adjuntan a proyectos de VC ++ usando la vista PropertyManager en Visual Studio. Cuando crea una de estas hojas, hay una interfaz para crear macros de usuario. Cuando agrega una macro usando este mecanismo, hay una casilla de verificación para configurar la macro de usuario como una variable de entorno. Utilizamos este tipo de mecanismo en nuestro sistema de compilación para configurar rápidamente proyectos para realizar compilaciones fuera de lugar. Nuestros diversos directorios de compilación están definidos como macros de usuario. En realidad, no he verificado que las variables de entorno estén configuradas en un script externo llamado desde post-build. Tiendo a usar estas macros como argumentos de línea de comandos para mis scripts posteriores a la compilación, pero esperaría acceder a ellos ya que las variables de entorno deberían funcionar para usted.

Esto es un poco hacky, pero podría funcionar.

¿Por qué no llamar múltiples scripts .py seguidos?

Cada secuencia de comandos puede pasar un pequeño subconjunto de los parámetros y los valores a un archivo de texto temporal. El guión final leerá y funcionará fuera del archivo de texto temporal.

Estoy de acuerdo en que este método está lleno de peligros y WTF, pero a veces solo tienes que hackear cosas juntos.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top