Définition des variables d'environnement dans les événements de pré-génération et utilisation de l'étape de compilation

StackOverflow https://stackoverflow.com/questions/419979

Question

Dans Visual Studio 2003, j'essaie de définir une variable d'environnement dans l'événement de pré-génération qui sera ensuite utilisé dans l'étape de compilation, mais la valeur ne semble pas être propagée. Par exemple, si l'événement de pré-génération contient ceci (directement ou dans un fichier de commandes):

set MY_LIB_VERSION=1.0.0

et AdditionalIncludeDirectories a ceci:

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

alors je m'attendrais à ce que la compilation fonctionne si le répertoire my_lib_v1.0.0 existe. Mais au lieu de cela, je reçois

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)

J'en déduis que la variable d'environnement définie dans l'événement de pré-génération n'est donc pas propagée à l'étape de compilation, mais il se peut que quelque chose me manque.

Comment définir la variable d'environnement dans l'événement de pré-génération et l'utiliser dans l'étape de compilation?

(Vous pouvez également utiliser une autre méthode judicieuse pour définir une version de bibliothèque une fois et l'utiliser plusieurs fois pour AdditionalIncludeDirectories et AdditionalLibraryDirectories.)

Mise à jour : j'ai résolu le problème différemment. Nous utilisons Subversion et avons configuré la propriété svn:externals dans un sous-répertoire de la source du projet appelé dependencies, de sorte qu'un contrôle de sortie du projet extrait en outre <svn_path>\libraries\my_lib_v1.0.0 et l'appelle dependencies\my_lib dans la copie de travail. Ensuite, les paramètres du projet peuvent faire référence à dependencies\my_lib\include et autres. La mise à niveau vers la version 1.0.1 de my_lib consiste alors simplement à modifier la propriété <=> - le code et les paramètres du projet n'ont pas besoin d'être modifiés.

Était-ce utile?

La solution

Vous pouvez explorer cet outil: http://workspacewhiz.com/SolutionBuildEnvironmentReadme.html

Nous l'utilisons tout le temps pour gérer les variables d'environnement dans notre environnement de construction.

Autres conseils

Je dois admettre que je n'ai jamais essayé de définir des variables d'environnement dans une étape de pré-génération, et je peux voir pourquoi cela ne fonctionnerait pas nécessairement (exécuter un fichier de commandes déclencherait probablement un processus séparé, alors que vous ' d veulent manipuler l’environnement du processus parent).

Une solution de contournement que j'utilise, mais qui ne fonctionnera que si vous pouvez déterminer les paramètres nécessaires avant de démarrer Visual Studio, consiste à créer un fichier de commandes qui définit les variables d'environnement nécessaires, puis lance Visual Studio avec la solution appropriée. fichier. J'ai reproduit le squelette de ce fichier batch ci-dessous:

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

Les variables d'environnement définies à l'aide de la commande SET sont temporaires et ne durent que pendant la durée de vie du processus dans lequel elles sont définies. Ils expirent immédiatement à l'expiration du processus et ne peuvent pas être vus par d'autres processus.

Un événement de pré-génération Visual Studio est un processus distinct. Une fois ce processus expiré, cette variable d'environnement cesse d'être.

Êtes-vous sûr que les variables d'environnement sont ce que vous voulez? Pourriez-vous le faire en définissant une valeur dans un fichier texte situé sur un emplacement réseau central?

ÉDITER : si vous voulez vraiment modifier de manière permanente les variables d'environnement dans Windows, vous pouvez le faire, mais cela impliquera d'appeler certaines API Windows plutôt que d'appeler SET. Par exemple. http://code.activestate.com/recipes/416087/

Essayez de googler Fenêtres de variable d'environnement persistantes

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top