2009-04-11 20 views
7

Ich verwende Emacs schon seit einiger Zeit für die grundlegende Textbearbeitung, aber ab heute versuche ich, es für die C++ - Kompilierung zu verwenden. Ich habe in den letzten paar Stunden darüber nachgedacht, wie ich das anstellen soll, aber ich trete immer wieder mit ihren Techniken gegen die Straßensperren an (ich denke, einige davon haben damit zu tun, dass die Tutorials veraltet sind).Kompilieren von C++ - Programmen mit Emacs unter Windows

Grundsätzlich möchte ich nur C++ - Programme kompilieren, die ich über den Befehl 'M-x compile' in Emacs schreibe.

Bisher habe ich Cygwin installiert und die Pakete für gcc heruntergeladen. Ich habe versucht, einige andere Lösungen von Tutorials online vorgestellt, aber sie haben es nicht geschafft.

Vielen Dank.

Antwort

3

Der M-x compile Befehl ruft zu einem Shell (zum Beispiel Linux bash, Fenster cmd.exe, etc.) anpassen, um den make Befehl auszuführen. Auf Windows denke ich, Emacs standardmäßig auf die cmd.exe Shell (über eine spezielle C:/Program Files/Emacs/emacs/bin/cmdproxy.exe ausführbare Datei).

Wenn Sie Ihre M-x compile wollen eine andere Shell verwenden (wahrscheinlich bash in Ihrem Fall Cygwin), dann müssen Sie Emacs sagen durch shell-file-name Variable oder mit der SHELL Umgebungsvariablen ändern. Sie müssen auch sicherstellen, dass der Cygwin make gefunden wird, indem Sie exec-path Variable ändern (oder Umgebungsvariable PATH verwenden).

dies zu tun:

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

Und Sie auch bei setup-cygwin.el setzen diese und einige andere Dinge für Cygwin aussehen könnte.

+0

Das funktioniert perfekt, um die Standard-Shell auf bash zu schalten, aber aus irgendeinem Grund findet es die make oder gcc-Befehle nicht, wenn ich versuche, sie auszuführen. –

+0

fügen Sie cygwin/usr/bin zu Ihnen Windows PATH? – Arkadiy

+0

Ja, ich habe es bereits hinzugefügt. –

3

Sie könnten versuchen, MinGW - "Minimalist GNU for Windows." Ich kann mich nicht erinnern von zu Beginn meines Kopfes, wie Emacs zu konfigurieren benutzerdefinierte Build-Tools von M-X kompilieren konfigurieren, aber es sollte möglich sein. Hier ist ein Link, den ich gerade gefunden habe, der ein Ausgangspunkt sein könnte.

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

+0

Standardmäßig ruft Emacs make mit M-x compile auf und make kann mit MinGW installiert werden. Wenn ich mich richtig erinnere, ist das einzige Problem, dass die ausführbare Datei von make nicht den Namen make hat, sondern umbenannt werden muss. –

3

ein Makefile für Ihr Programm schreiben und "make -k" für "M-x Kompilierung" verwenden, wie sie in der Emacs Dokumentation vorgeschlagen. Die Verwendung von make (oder ähnlichen Build-Tools) ist besser, als Befehlszeilen für GCC im Allgemeinen zu wiederholen, nicht nur für Emacs.

+0

Beim Ausführen des make-Befehls bekomme ich immer einen Fehler, der besagt "start-process-shell-command: Kindprozess erzeugen: ungültiges Argument". Ich habe versucht, sowohl 'make-k-Übung' und 'machen Sie Übung' beide geben den gleichen Fehler. –

+0

Funktioniert es, wenn Sie es in einer Konsole eingeben? –

+0

Es funktioniert, wenn ich es in einem normalen cmd-Fenster eintippe, aber wenn ich versuche, make über den Befehl emacs m-x shell auszuführen, erkennt es den make-Befehl nicht. –

7

Nach der Installation eines Compilers. Sie können den folgenden Code-Schnipsel verwenden Kompilierungsbefehl

(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

Wenn Sie Emacs und g ++ in Cygwin installieren, sollte es genauso wie Linux funktionieren, was bedeutet, dass Sie M-x compile ausführen und g++ myFile.cpp als Ihren Kompilierbefehl verwenden können. Wenn Sie den "nativen" Emacs für Windows verwenden oder Cygwin/MinGW/etc mischen, werden die Dinge etwas komplizierter (und andere Antworten haben Lösungen), aber es kommt darauf an sicherzustellen, dass Ihre Umgebungsvariablen korrekt eingerichtet sind (zB PATH, SHELL, usw.). Wenn Sie es nicht über die Befehlszeile ausführen können (entweder cmd.exe oder/bin/bash von Cygwin oder MinGW), funktioniert es in keinem Emacs.

Als ein Beispiel kompiliere ich C++ in Emacs mit beiden SCons/g ++ von Cygwin und devenv.com von MS Visual Studio. Dies erfordert natürlich die Installation von SCons und Visual Studio, aber es ist möglich. SCons wird von Cygwinports (http://sourceware.org/cygwinports/) installiert und landet in/usr/bin, was im Standardpfad ist, aber devenv.com ist tief in Visual Studio begraben; Zugang zu ihm zu erhalten, füge ich es enthält Verzeichnis meiner PATH (in meinem ~/.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 

ich dann einen Compiler-Befehl von beiden scons oder devenv.com -build "Release|Platform MySolution.sln konstruieren, und die Dinge gehen fröhlich von dort entlang. Sie können so kompliziert werden, wie Sie benötigen (in meinem aktuellen Projekt habe ich Build- und Test-Shell-Skripte, die auf scons und devenv.com hinweisen; ich tendiere dazu, Batch-Dateien zu vermeiden, da Shell viel mächtiger ist). Meine einzige Beschwerde ist, dass Microsoft die Ausgabe von Fehlern änderte und so automatisch zu Zeilen im Code von der Compiler-Ausgabe springt, ist derzeit gebrochen (ich muss in das Reparieren davon schauen).

Ich gehe davon aus, dass Sie aus dem "nativen" Build von Emacs kommen, in diesem Fall finden Sie möglicherweise auch das cygwin-mount Modul für Emacs nützlich.

Verwandte Themen