Domanda

[NOTA: questa domanda è simile ma non è la stessa di questo .]

Visual Studio definisce diverse dozzine di "Macro" che sono una sorta di variabili d'ambiente simulate (completamente estranee alle macro C ++) che contengono informazioni sulla build in corso. Esempi:

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

Ecco il set completo di 43 macro integrate che vedo (le tue potrebbero differire in base alla versione di VS che usi e agli strumenti che hai abilitato):

    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             

Di questi, solo quattro ( FrameworkDir , FrameworkSDKDir , VCInstallDir e VSInstallDir ) sono impostati nell'ambiente usato per build-events.

Come accenna Brian, è possibile definire macro definite dall'utente tali da essere impostate nell'ambiente in cui vengono eseguite le attività di compilazione. Il mio problema è con le macro integrate.

Uso un evento Post-Build di Visual Studio per eseguire uno script Python come parte del mio processo di compilazione. Mi piacerebbe passare l'intero set di Macro (integrato e definito dall'utente) al mio script nell'ambiente, ma non so come. All'interno del mio script posso accedere alle normali variabili di ambiente (ad es. Path, SystemRoot) ma NON queste "Macro". Tutto quello che posso fare ora è passarli uno a uno come opzioni nominate che poi elaboro nel mio script. Ad esempio, ecco come appare la mia riga di comando per l'evento Post-Build:

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

Oltre ad essere un dolore al collo, c'è un limite alle dimensioni della riga di comando di Post-Build Event, quindi non posso passare dozzine di macro usando questo metodo anche se lo volessi perché la riga di comando è troncata.

Qualcuno sa se esiste un modo per passare l'intero set di nomi e valori Macro a un comando che NON richiede il passaggio a MSBuild (che credo non sia disponibile per VC ++ nativo) o qualche altro strumento di compilazione simile ?

È stato utile?

Soluzione 3

Per quanto ne so, il metodo descritto nella domanda è l'unico modo per passare le variabili di build a uno script Python.

Forse Visual Studio 2010 ha qualcosa di meglio?

Altri suggerimenti

Potresti voler esaminare i fogli di proprietà. Questi sono file che contengono le impostazioni di Visual C ++, comprese le macro utente. I fogli possono ereditare da altri fogli e sono collegati ai progetti VC ++ usando la vista PropertyManager in Visual Studio. Quando si crea uno di questi fogli, esiste un'interfaccia per la creazione di macro utente. Quando si aggiunge una macro utilizzando questo meccanismo, è presente una casella di controllo per l'impostazione della macro utente come variabile di ambiente. Usiamo questo tipo di meccanismo nel nostro sistema di build per impostare rapidamente progetti per eseguire build fuori luogo. Le nostre varie directory di build sono tutte definite come macro utente. In realtà non ho verificato che le variabili di ambiente siano impostate in uno script esterno chiamato da post-build. Tendo a usare queste macro come argomenti della riga di comando per i miei script post-build, ma mi aspetterei di accedervi poiché le variabili di ambiente dovrebbero funzionare per te.

Questo è un po 'confuso, ma potrebbe funzionare.

Perché non chiamare più script .py di fila?

Ciascuno script può passare in un piccolo sottoinsieme dei parametri e dei valori in un file di testo temporaneo. Lo script finale leggerà e funzionerà al di fuori del file di testo temporaneo.

Sono d'accordo sul fatto che questo metodo è pieno di pericoli e di WTF, ma a volte devi solo hackerare le cose insieme.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top