Invoquant cl.exe (MSVC compilateur) dans le shell Cygwin
Je suis fortement l'utilisation de Cygwin (avec Mastic shell). Mais, c'est assez difficile à invoquer cl.exe
(qui est, le compilateur Visual C++ de la chaîne d') dans le shell Bash Cygwin. L'exécution de vcvars*.bat
dans le shell Bash ne fonctionne pas de toute évidence. J'ai essayé de migrer VC++de variables d'environnement pour Cygwin, mais il n'est pas facile.
Comment puis-je exécuter le compilateur VC++ dans Cygwin du shell Bash?
- Cette question est liée stackoverflow.com/questions/62029/vs2008-command-prompt-cygwin/...
- Mon wrapmsvc [ code.google.com/p/wrapmsvc ] programme pourrait être utile. C'est un wrapper pour l'appelant cl.exe et d'autres outils MS à partir de Linux via Wine; il traduit de style unix chemins de Vin de style windows chemins et commence la véritable outil via Wine. Cela signifie que vous pouvez appeler le compilateur unix chemins sans confondre le réel compilateur. Bien sûr, cela ne fonctionnera pas dans Cygwin, car il n'y a pas de Vin, mais vous pourriez être en mesure de la modifier à n'utiliser pas de Vin et au lieu de faire la traduction de chemin d'accès d'une autre façon.
Vous devez vous connecter pour publier un commentaire.
J'ai l'habitude de résoudre ce problème en ajoutant
à c:/cygwin/cygwin.bat. Notez que le VS80COMNTOOLS variable est extrêmement utile, car il vous donne un service à toute épreuve (hm) moyen de localiser vsvars32.chauve-souris.
Une autre approche est-ce qui vous permet de basculer facilement entre les différentes versions Studio:
Vous pouvez désormais le faire:
Note la version de compilateur.
echo "call \"%$batfile%..\\..\\VC\\vcvarsall.bat\" amd64 >NUL:" >> $tmpfile
à chercher la bonne version de compilateur pour construire x64 code.cmd /c call "${!batfile}vsvars32.bat" \&\& bash -c "$*"
Qui fonctionne très bien pour moi avec pas de fichiers temporaires nécessaires. La version originale a été de me donner de la difficulté avec les espaces dans "Program Files (x86)".Je comprends que votre problème est la conversion de vcvars32.chauve-souris dans un script shell.
Un moyen de contourner le problème est basé sur l'idée que les variables d'environnement sont héritée d'un processus de lancement d'un autre. Ainsi, vous pouvez simplement exécuter vcvars32 sous cmd, puis exécutez bash. Cela fonctionne très bien sur ma machine:
Vous pouvez également exécuter ensemble avant et après l'invocation vcvars32 sous cmd, puis créer un script shell pour définir les variables d'environnement.
Suggestions suivantes dans les autres réponses, j'ai fait un diff de mon bash "set" résultats avec et sans le MSVC variables, et est venu avec le script suivant à les reproduire pour mon installation de Microsoft Visual C++ 2010 Express. J'ai refait un peu de tout mettre dépendant de l'installation des pièces en haut, donc j'espère que ce qui peut être utile à d'autres.
J'ai utilisé JesperE réponse https://stackoverflow.com/a/374411/380247 (qui vous permet de basculer entre VS les versions), mais a trouvé un moyen de ne pas créer temporaire fichier bat. Donc le résultat est beaucoup plus simple.
Je suggère d'ajouter ces lignes dans votre .bash_functions ou quelque chose de similaire et l'exportation de ces fonctions là. Cela vous permettra d'utiliser les fonctions dans les scripts bash.
Une autre solution est d'ouvrir vcvars32.chauve-souris (ou vsvars32.chauve-souris, qui ne le réel de travail au cours des dernières version de Visual Studio), regardez ce qu'il fait, et répliquer que dans le script shell.
Il n'est pas particulièrement complexe - il n'est de définir un tas de variables d'environnement.
J'ai converti mon
vsvars32.bat
fichier avec monvisual_studio.env
fichier. Quand j'ai besoin d'utiliser la ligne de commande Visual Studio de l'environnement, je viens de faire une source de ce fichier.Dans le
sh
de l'environnement de shell, je ne peut pas enregistrer le chemin d'accès Windows (\
et;
clash avecsh
), de sorteavant je les traduire avec
cygpath -au
oucygpath -aup commands
puis-je écrire dans mon.env
fichier et de les traduire aveccygpath -aw
oucygpath -aup commands
.Mon
visual_studio.env
fichier ressemble à ceci:J'espère que cela peut vous aider.
Je trouve une stratégie pour mieux utiliser
msbuild
et puis en même temps, je peux aussi utiliserg++
de mon environnement cygwin. C'est une approche plus intégrée et se marie harmonieusement avec l'existantvisual studio
développement. En utilisant le niveau le plus bascl
et la configuration des variables d'environnement est d'avoir des ennuis et d'aller contre le vent. Lemsbuild
peut mieux le programme d'installation choses pour nous. Aussi, je peux pas-de débogage dans l'IDE d'avoir un gage*.vcxproj
projet.Puis dans votre ~/.bashrc, ont cette fonction:
La sensation de l'expérience de développement ressemble cette. Au moins, je suis en mesure d'utiliser le
g++
compilateur et leVisual Studio 2017
compilateur mieux intégrée. Laissezmsbuild
faire sa chose. Pascl
.Pour moi, le suivant dans .bash_profile travaillé:
"`cygpath -ua "$VS80COMNTOOLS/vsvars32.bat"`" > NUL
Un utilitaire que j'ai trouvé assez précieux pour la compilation des trucs avec msvc à partir d'un environnement cygwin est un wrapper j'ai trouvé dans le Pièce en 3D bibliothèque du référentiel source appelée "wrapmsvc", qui est du binaire peut être trouvé ici.
Le programme enveloppements cl.exe et convertit tout GCC args spécifié approprié cl.exe arg. Il utilise également cygwin API pour traduire correctement le chemin d'accès à partir de cygwin forme (/cygdrive/c/temp/test.c) il est chemin du fichier (C:\temp\test.c).
La source m'a fallu un peu de temps pour trouver la dernière fois, mais il est appelé "wrapmsvc.cpp", donc si vous avez besoin de compiler, optez pour ce fichier. Si vous ne vous arrive de le compiler et vous obtenez une dépréciation des avertissements/erreurs au sujet de l'utilisation de cygwin_conv_to_posix_path ou cygwin_conv_to_win32_path, apporter les modifications suivantes:
Modifier la ligne:
à
et le changement:
à
Je n'arrivais pas à ajouter des commentaires à Diomidis réponse :(, j'ai donc dû répondre à la place.
Je suis d'accord avec sa réponse, mais il serait fastidieux de faire "ouvrir une invite de commande", exécutez Visual Studio/
vcvars32.bat
puis exécutez Bash. Si vous n'avez pas pris la peine de vous encombrer de l'environnement, la meilleure solution est de modifierCygwin.bat
et de le modifier pour ressembler à quelque chose comme ceci:Remplacer la variable d'environnement VS71COMNTOOLS avec quelque chose d'approprié sur votre ordinateur.
Il n'est pas nécessaire d'ouvrir une invite de commande et exécutez Bash manuellement. J'aime cette solution beaucoup :). Je ne pouvais pas donner des crédits pour le véritable auteur de ce hack, que je ne pouvais pas trouver un lien vers son article, désolé!