Pregunta

En Visual Studio 2003, estoy intentando establecer una variable de entorno en el evento previo a la compilación que luego se usará en el paso de compilación, pero el valor no parece propagarse.Por ejemplo, si el evento previo a la compilación contiene esto (ya sea directamente o dentro de un archivo por lotes):

set MY_LIB_VERSION=1.0.0

y AdditionalIncludeDirectories tiene esto:

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

entonces esperaría que la compilación funcione si el my_lib_v1.0.0 El directorio existe.Pero en lugar de eso, obtengo

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)

Deduzco que la variable de entorno establecida en el evento previo a la compilación, por lo tanto, no se propaga al paso de compilación, pero es posible que me falte algo.

¿Cómo puedo configurar la variable de entorno en el evento previo a la compilación y usarla en el paso de compilación?

(Como alternativa, cualquier otra forma sensata de definir una versión de biblioteca una vez y usarla varias veces para AdditionalIncludeDirectories y AdditionalLibraryDirectories funcionaría igual de bien).


Actualizar:Terminé resolviendo nuestro problema de una manera diferente.Estamos usando Subversion y configuramos el svn:externals propiedad en un subdirectorio de la fuente del proyecto llamado dependencies, de modo que una verificación del proyecto también verificaría <svn_path>\libraries\my_lib_v1.0.0 y llámalo dependencies\my_lib en la copia de trabajo.Entonces la configuración del proyecto podría referirse a dependencies\my_lib\include y cosas así.Actualización a la versión 1.0.1 de my_lib entonces es simplemente una cuestión de editar el svn:externals propiedad: no fue necesario cambiar el código ni la configuración del proyecto.

¿Fue útil?

Solución

Es posible que desee investigar esta herramienta: http://workspacewhiz.com/SolutionBuildEnvironmentReadme.html

Lo usamos todo el tiempo para administrar variables de entorno en nuestro entorno de compilación.

Otros consejos

Debo admitir que nunca he intentado establecer variables de entorno en un paso previo a la compilación, y puedo ver por qué no funcionaría necesariamente (la ejecución de un archivo por lotes probablemente desencadenaría un proceso separado, mientras que usted ' quisiera manipular el entorno del proceso padre).

Una solución alternativa que he estado usando, pero que solo funcionará cuando pueda determinar la configuración necesaria antes de iniciar Visual Studio, es crear un archivo por lotes que establezca las variables de entorno necesarias y luego inicie Visual Studio con la solución adecuada expediente. He reproducido el esqueleto de este archivo por lotes a continuación:

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

Las variables de entorno que se configuran con el comando SET son temporales y solo duran la vida útil del proceso en el que se configuran. Caducan inmediatamente cuando vence el proceso, y otros procesos no pueden verlos.

Un evento previo a la compilación de Visual Studio es un proceso separado. Una vez que el proceso expira, la variable de entorno deja de existir.

¿Está seguro de que las variables de entorno son lo que desea? ¿Podría hacer esto estableciendo un valor en un archivo de texto en una ubicación de red central?

EDIT : si realmente desea cambiar persistentemente las variables de entorno en Windows, puede hacerlo, pero implicará llamar a algunas API de Windows en lugar de simplemente llamar a SET. P.ej. http://code.activestate.com/recipes/416087/

Intente buscar en Google ventanas variables de entorno persistentes

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