Domanda

In Visual Studio 2003, sto cercando di impostare una variabile di ambiente nell'evento pre-build che verrà quindi utilizzato nel passaggio della compilazione, ma il valore non sembra essere propagato. Ad esempio, se l'evento pre-build lo contiene (direttamente o all'interno di un file batch):

set MY_LIB_VERSION=1.0.0

e AdditionalIncludeDirectories ha questo:

c:\path\to\library\my_lib_v$(MY_LIB_VERSION)\include

quindi mi aspetto che la compilazione funzioni se esiste la directory my_lib_v1.0.0 . Ma invece, ottengo

c:\path\to\prog\my_prog.c(22) : fatal error C1083: Cannot open include file: 'my_lib.h'
Project : warning PRJ0018 : The following environment variables were not found:
$(MY_LIB_VERSION)

Deduco che la variabile di ambiente impostata nell'evento pre-build non viene quindi propagata al passaggio della compilazione, ma potrei mancare qualcosa.

Come posso impostare la variabile d'ambiente nell'evento pre-build e usarla nella fase di compilazione?

(In alternativa, qualsiasi altro modo sensato di definire una versione della libreria una volta e usarla più volte per AdditionalIncludeDirectories e AdditionalLibraryDirectories farebbe altrettanto.)


Aggiorna : ho finito per risolvere il nostro problema in modo diverso. Stiamo usando Subversion e impostiamo la proprietà svn: externals su una sottodirectory della sorgente del progetto chiamata dipendenze , in modo tale che un checkout del progetto verifichi ulteriormente < svn_path > \ libraries \ my_lib_v1.0.0 e chiamalo dipendenze \ my_lib nella copia di lavoro. Quindi le impostazioni del progetto potrebbero fare riferimento a dipendenze \ my_lib \ include e simili. L'aggiornamento alla versione 1.0.1 di my_lib è semplicemente una questione di modifica della proprietà svn: externals - il codice e le impostazioni del progetto non hanno bisogno di cambiare.

È stato utile?

Soluzione

Potresti voler esaminare questo strumento: http://workspacewhiz.com/SolutionBuildEnvironmentReadme.html

Lo usiamo continuamente per gestire le variabili di ambiente nel nostro ambiente di compilazione.

Altri suggerimenti

Devo ammettere che non ho mai tentato di impostare le variabili di ambiente in una fase di pre-compilazione e posso capire perché non funzionerebbe necessariamente (l'esecuzione di un file batch molto probabilmente innescerebbe un processo separato, mentre tu " d vuole manipolare l'ambiente del processo genitore).

Una soluzione alternativa che ho usato, ma che funzionerà solo quando è possibile determinare le impostazioni necessarie prima di avviare Visual Studio, è quella di creare un file batch che imposta le variabili di ambiente necessarie e quindi dare il via a Visual Studio con la soluzione appropriata file. Di seguito ho riprodotto lo scheletro di questo file batch:

REM
REM Set up VS environment with defaults (this is for 2008) - need to do this first
REM
call "C:\Program Files\Microsoft Visual Studio 9.0\Common7\Tools\vsvars32.bat"
REM
REM Set the environment variables required by the project
REM
set BOOST_BASE=C:\Boost\include\boost-1_35
REM
REM If you need to manipulate the path, do it here
REM
REM
REM Finally, start VS with the appropriate solution file
REM
devenv MyProjectWithBoost.sln

Le variabili d'ambiente che sono impostate usando il comando SET sono temporanee e durano solo per la durata del processo in cui sono impostate. Scadono immediatamente alla scadenza del processo e non possono essere visualizzati da altri processi.

Un evento pre-build di Visual Studio è un processo separato. Una volta scaduto il processo, la variabile di ambiente cessa di essere.

Sei sicuro che le variabili di ambiente siano quelle che desideri? Potresti farlo impostando un valore in un file di testo contenuto in un percorso di rete centrale?

EDIT : se vuoi davvero cambiare in modo persistente le variabili di ambiente in Windows puoi farlo ma coinvolgerà la chiamata in alcune API di Windows piuttosto che la semplice chiamata a SET. Per esempio. http://code.activestate.com/recipes/416087/

Prova a cercare su Google finestre variabili d'ambiente persistenti

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