2009-01-16 5 views
2

Je programme avec Visual C++ Express sur la ligne de commande en utilisant makefiles (GNU Make). Pour que cela fonctionne, je dois appeler le fichier de commandes Visual Studio vsvars32.bat pour configurer l'environnement. Cela doit être fait chaque fois que j'ouvre un nouveau cmd.exe, avant d'utiliser make. Lorsque j'essaie d'appeler le fichier de commandes à partir de mon fichier makefile, il est évident qu'il exécute le fichier de commandes en tant que propre processus, car l'environnement est le même par la suite. Donc ma question: existe-t-il un moyen d'exécuter des scripts dans cmd.exe comme la commande intégrée source de la commande Linux/Unix bash? Mis à part l'installation de bash sur Windows, bien sûr.Appel de fichiers de commandes avec make et de rendre les changements persistants

Modifier après avoir publié ma réponse:

La question ci-dessus n'est pas tout à fait raison, il devrait ressembler à ceci:

Est-il possible d'appeler un fichier batch évolution de l'environnement à partir d'un makefile , de sorte que l'environnement modifié persiste pour les autres programmes appelés dans le makefile?

La réponse à la question d'origine est oui: vous pouvez utiliser la commande intégrée de cmd.exe. Mais puisque appel est une commande intégrée et pas un vrai programme, il ne fonctionne pas dans un fichier make, seulement si vous appelez un fichier de commandes à partir d'un autre fichier de commandes.

Répondre

4

Réponse compilé à partir des réponses précédentes:

J'ai fait un fichier batch appelé make.bat qui contient les éléments suivants:

appel "% VS90COMNTOOLS% vsvars32.bat"
appel make.exe % *

Cela fait le travail. Mais l'appel d'un fichier de commandes changeant l'environnement depuis un makefile, de sorte que l'environnement modifié persiste pour les autres programmes appelés dans le makefile, semble impossible.

Edit: Après débordement ma variable PATH en appelant à plusieurs reprises vsvars32.bat, j'ai fait les modifications suivantes:

sinon "% VISUALCVARS%" == "true" (
set VISUALCVARS = TRUE
appel "% VS90COMNTOOLS% vsvars32.bat"
)
appel make.exe% *

+0

Que fait% *? – samoz

1

utilisation Appel ':

@echo off 
pushd. 
call "C:\Program Files\Microsoft Visual Studio 8\Common7\Tools\vsvars3235.bat" 
msbuild LinqSupportClassesSDKBuild.csproj /t:rebuild /p:Configuration=Release /nologo /v:q /clp:ErrorsOnly; 
popd 

c'est le fichier cmd que nous utilisons pour construire notre fournisseur de LINQ.

1

Au moins dans mon installation de Visual Studio (quoique un peu ancien VS.NET 2003), l'un des liens dans le groupe de menus Démarrer VS est d'ouvrir une instance cmd.exe avec l'environnement déjà configuré. Vous pourriez trouver ces utiles:

Ils sont plus orientés vers le lancement de l'invite de commande à partir de l'IDE, mais ils comprennent des informations sur le lancement avec le environnement approprié que vous pourriez trouver utile à vos fins.

1

Comment lancer votre console? Si vous êtes en train de lancer « cmd » puis à la place, créez un raccourci qui exécute (% comspec% décide de c: \ windows \ cmd.exe ou tout ce qui est relevent sur votre système)

%comspec% /k ""C:\Program Files\Microsoft Visual Studio 8\VC\vcvarsall.bat"" x86 

De toute évidence, changer le chemin pour pointer vers le bon dossier d'installation. Plus généralement, comme indiqué ci-dessus, si un fichier .cmd doit traiter un autre fichier .cmd plutôt que de le lancer en tant que processus séparé, utilisez la commande batch 'call'.

0

Enveloppe GNU make dans un script (mmake.bat). Mettez le script dans le chemin quelque part.

Le script lui-même doit exécuter vsvars32.chauve-souris puis faire, comme ce

vsvars32.bat 
make %* 

Pour autant que je me rappelle, invoquant un script d'un autre script comme cela se fait dans le même shell (similaire à Bash commande « »).

+1

Merci. J'ai pensé à cela, mais je ne savais pas sur le *% **. Mais vous devez utiliser un * appel * devant les commandes. – Xenu

0

I ont trouvé trois solutions à ce problème:

1) Si les variables d'environnement définies par le fichier de commandes sont statiques (c'est-à-dire qu'elles ont toujours les mêmes valeurs), définissez ces valeurs pour l'ensemble de votre profil utilisateur. Cliquez avec le bouton droit sur Poste de travail, cliquez sur Propriétés -> Avancé -> Variables d'environnement. Ajoutez les variables du fichier de commandes à la section Variables utilisateur ou Variables système (seules les variables utilisateur sont visibles par vous, les variables système sont visibles par tous les utilisateurs de cet ordinateur). 2) Ecrire un fichier de traitement par lots qui appelle le script de configuration de l'environnement puis appelle le Makefile.

3) Au lieu d'utiliser la commande SET pour définir les variables d'environnement dans le fichier batch, utilisez la commande SETX (nécessite le Kit de ressources Windows). SETX est similaire à SET, sauf qu'il apporte ses modifications à l'environnement maître dans le registre et prendra effet dans toutes les invites de commande lancées dans le futur (mais pas l'actuelle).

Questions connexes