2009-04-11 10 views
7

Utilizzo Emacs da un po 'di tempo per la modifica di base del testo, ma ad oggi sto tentando di usarlo per la compilazione C++. Ho cercato le ultime ore su come procedere, ma continuo a colpire i blocchi stradali nelle loro tecniche (penso che questo abbia a che fare con i tutorial che sono obsoleti).Compilazione di programmi C++ con Emacs su Windows

Fondamentalmente, tutto quello che voglio fare è essere in grado di compilare programmi C++ che scrivo in Emacs tramite il comando 'M-x compile'.

Finora ho installato Cygwin e scaricato i pacchetti per gcc. Ho provato altre soluzioni presentate dai tutorial online ma non sono state apportate.

Grazie.

risposta

3

Il comando M-x compile chiama a una shell (per esempio Linux bash, finestre cmd.exe, ecc) per eseguire il comando make. Su Windows penso che emacs abbia come valore predefinito la shell (attraverso un file eseguibile speciale C:/Program Files/Emacs/emacs/bin/cmdproxy.exe).

Se volete che il vostro M-x compile di utilizzare una shell diversa (probabilmente cygwin bash nel tuo caso), allora dovete dire emacs attraverso cambiando shell-file-name variabile o usando la variabile SHELL ambiente. Dovrai inoltre assicurarti che il cygwin make venga trovato modificando la variabile exec-path (o utilizzando la variabile di ambiente PATH).

Per fare questo:

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

e si potrebbe anche guardare setup-cygwin.el impostare questa funzione e alcune altre cose per Cygwin.

+0

Questo funziona perfettamente per passare la shell di default a bash ma per qualche motivo non sta trovando i comandi make o gcc quando provo ad eseguirli. –

+0

aggiungi cygwin's/usr/bin al tuo PATH di Windows? – Arkadiy

+0

Sì, l'ho già aggiunto. –

3

Si potrebbe provare MinGW - "Minimalist GNU for Windows." Non riesco a ricordare come mai come configurare emacs per chiamare gli strumenti di compilazione personalizzati da M-x compile, ma dovrebbe essere possibile. Ecco un link che ho appena scoperto potrebbe essere un punto di partenza.

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

+0

Per impostazione predefinita, Emacs chiamerà make con M-x compilare e make può essere installato con MinGW. Se ricordo bene, l'unico problema è che l'eseguibile di make in realtà non è chiamato make, devi rinominarlo. –

3

Scrivi un Makefile per il vostro programma e utilizzare "make -k" per "M-x di compilazione", come suggerito dalla documentazione di Emacs. L'utilizzo di make (o di strumenti di sviluppo simili) è una pratica migliore rispetto alla ridigitazione delle righe di comando per GCC in generale, non solo per Emacs.

+0

Durante l'esecuzione del comando make continuo a ricevere un errore che dice "start-process-shell-command: spawning child process: invalid argument". Ho provato ad usare sia l'esercizio 'make -k' che 'fare esercizio', entrambi danno lo stesso errore. –

+0

Funziona se lo digiti in una console? –

+0

Funziona quando lo digito in una normale finestra cmd, ma se provo a eseguire make tramite il comando emacs m-x shell non riconosce il comando make. –

7

Dopo aver installato un compilatore. È possibile utilizzare il seguente frammento di personalizzare comando di compilazione

(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

Se si installa Emacs e g ++ in Cygwin, dovrebbe funzionare proprio come Linux, vale a dire che è possibile eseguire M-x compile e utilizzare g++ myFile.cpp come comando di compilazione. Se stai usando Emacs "nativo" per Windows, o mescolando Cygwin/MinGW/etc, le cose diventano un po 'più complicate (e altre risposte hanno soluzioni), ma si riduce a fare in modo che le variabili di ambiente siano configurate correttamente (ad esempio PERCORSO, CALOTTA, ecc.). In definitiva, se non è possibile eseguirlo sulla riga di comando (sia cmd.exe o/bin/bash da Cygwin o MinGW), non funzionerà in alcun Emacs.

Come esempio, compongo C++ in Emacs utilizzando sia SCons/g ++ da Cygwin che devenv.com da MS Visual Studio. Ciò richiede ovviamente l'installazione di SCons e Visual Studio, ma è possibile. SCons installa da Cygwinports (http://sourceware.org/cygwinports/) e finisce in/usr/bin, che si trova nel percorso standard, ma devenv.com è sepolto in profondità in Visual Studio; per ottenere l'accesso ad essa, aggiungo che è contenente directory sul mio cammino (nel mio ~/.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 

Ho poi costruire un comando di compilazione di una scons o devenv.com -build "Release|Platform MySolution.sln, e le cose vanno allegramente lungo da lì. È possibile ottenere il massimo delle complicazioni necessarie (nel mio progetto corrente ho script di build e test shell con callout su scons e devenv.com; tendo a evitare i file batch, poiché la shell è molto più potente). La mia unica lamentela è che Microsoft ha modificato l'output degli errori e quindi il passaggio automatico alle righe nel codice dall'output del compilatore è attualmente interrotto (devo cercare di risolverlo).

Suppongo che tu venga dalla build "nativa" di Emacs, nel qual caso potresti anche trovare utile il modulo cygwin-mount per Emacs.

Problemi correlati