2009-04-11 9 views
7

J'utilise Emacs depuis un certain temps pour l'édition de texte de base, mais à ce jour, j'essaie de l'utiliser pour la compilation C++. J'ai cherché ces dernières heures sur la façon de s'y prendre, mais je continue d'aborder les obstacles dans leurs techniques (je pense que cela est dû au fait que les tutoriels sont obsolètes).Compilation de programmes C++ avec Emacs sous Windows

Fondamentalement, tout ce que je veux faire est de pouvoir compiler des programmes C++ que j'écris dans Emacs via la commande 'M-x compile'. Jusqu'à présent, j'ai installé Cygwin et téléchargé les paquets pour gcc. J'ai essayé d'autres solutions présentées par des tutoriels en ligne, mais ils n'ont pas fonctionné.

Merci.

Répondre

3

La commande M-x compile appelle à un shell (par exemple linux bash, fenêtres cmd.exe, etc.) pour exécuter la commande make. Sur Windows, je pense qu'emacs utilise par défaut le shell cmd.exe (via un exécutable spécial C:/Program Files/Emacs/emacs/bin/cmdproxy.exe).

Si vous voulez que votre M-x compile d'utiliser un autre shell (cygwin probablement bash dans votre cas), alors vous devez dire emacs en changeant la variable shell-file-name ou en utilisant la variable d'environnement SHELL. Vous devrez également vous assurer que la valeur make de cygwin est trouvée en changeant la variable exec-path (ou en utilisant la variable d'environnement PATH).

Pour ce faire:

(setq shell-file-name "C:/cygwin/bin/bash.exe") 
(setq exec-path (cons "C:/cygwin/bin" exec-path)) 

Et vous pouvez aussi regarder setup-cygwin.el pour régler cela et d'autres choses pour Cygwin.

+0

Cela fonctionne parfaitement pour changer le shell par défaut en bash mais pour une raison quelconque, il ne trouve pas les commandes make ou gcc lorsque j'essaie de les exécuter. –

+0

ajouter cygwin/usr/bin à vous Windows PATH? – Arkadiy

+0

Oui, je l'ai déjà ajouté. –

3

Vous pouvez essayer MinGW - "Minimalist GNU for Windows." Je ne me souviens pas du début de la tête comment configurer emacs pour appeler des outils de construction personnalisés à partir de la compilation M-x, mais cela devrait être possible. Voici un lien que je viens de rencontrer qui pourrait être un point de départ.

http://www.cae.tntech.edu/help/programming/free-programming-tools-windows

+0

Par défaut, Emacs appellera make avec la compilation M-x, et make peut être installé avec MinGW. Si je me souviens bien, le seul problème est que l'exécutable de make n'est pas nommé make, vous devez le renommer. –

3

Ecrire un Makefile pour votre programme et utiliser "make -k" pour "M-x la compilation", comme le suggère la documentation Emacs. Utiliser make (ou des outils de construction similaires) est une meilleure pratique que de retaper des lignes de commande pour GCC en général, pas seulement pour Emacs.

+0

Lors de l'exécution de la commande make, je reçois toujours une erreur disant "start-process-shell-command: Spawning enfant processus: argument invalide". J'ai essayé d'utiliser à la fois 'make -k exercise' et 'make exercise' tous les deux donnent la même erreur. –

+0

Est-ce que le travail fonctionne si vous le tapez dans une console? –

+0

Cela fonctionne quand je le tape dans une fenêtre de cmd normale mais si j'essaie de lancer make à travers la commande emacs m-x shell, il ne reconnaît pas la commande make. –

7

Après l'installation d'un compilateur. Vous pouvez utiliser l'extrait ci-dessous pour personnaliser la commande de compilation

(add-hook 'c++-mode-hook 
    (lambda() 
    (unless (file-exists-p "Makefile") 
     (set (make-local-variable 'compile-command) 
     (let ((file (file-name-nondirectory buffer-file-name))) 
     (concat "g++ -g -O2 -Wall -o " 
      (file-name-sans-extension file) 
      " " file)))))) 
0

Si vous installez Emacs et g ++ dans Cygwin, cela devrait fonctionner exactement comme Linux, c'est-à-dire que vous pouvez exécuter M-x compile et utiliser g++ myFile.cpp comme commande de compilation. Si vous utilisez l'Emacs "natif" pour Windows, ou que vous mélangez Cygwin/MinGW/etc, les choses deviennent un peu plus compliquées (et d'autres réponses ont des solutions), mais cela revient à s'assurer que les variables d'environnement sont correctement configurées (par exemple PATH, SHELL, etc). En fin de compte, si vous ne pouvez pas l'exécuter sur la ligne de commande (soit cmd.exe ou/bin/bash à partir de Cygwin ou MinGW), il ne fonctionnera pas dans n'importe quel Emacs.

À titre d'exemple, je compile C++ dans Emacs en utilisant à la fois SCons/g ++ de Cygwin et devenv.com de MS Visual Studio. Cela nécessite bien sûr l'installation de SCons et de Visual Studio, mais c'est possible. SCons installe à partir de Cygwinports (http://sourceware.org/cygwinports/) et finit dans/usr/bin, qui est dans le chemin standard, mais devenv.com est enterré profondément dans Visual Studio; pour y avoir accès, je l'ajoute a répertoire contenant à mon PATH (dans mon ~/.bash_profile):

case $OS in 
    Windows_NT) 
     case "`uname -s`" in 
      CYGWIN_NT*) 
       PATH=${PATH}:"/cygdrive/c/Program Files (x86)/Microsoft Visual Studio 10.0/Common7/IDE/" 
       ;; 
      MINGW32_NT*) 
       PATH=${PATH}:"/c/Program Files (x86)/Microsoft Visual Studio 10.0/Common7/IDE/" 
       ;; 
     esac 
esac 

Je puis construire une commande de compilation soit scons ou devenv.com -build "Release|Platform MySolution.sln, et les choses vont allègrement le long de là. Vous pouvez obtenir aussi compliqué que vous avez besoin (dans mon projet actuel, j'ai construit et tester des scripts shell à scons et devenv.com, j'ai tendance à éviter les fichiers batch, car le shell est beaucoup plus puissant). Ma seule plainte est que Microsoft a changé la sortie des erreurs et donc sauter automatiquement à des lignes dans le code de la sortie du compilateur est actuellement cassé (je dois chercher à corriger cela).

Je suppose que vous venez de la version "native" d'Emacs, auquel cas, vous pourriez également trouver utile le module cygwin-mount pour Emacs.

Questions connexes