2013-04-02 9 views
5

Używam M-x compile w Emacs do kompilacji mojego kodu C, który następnie inicjuje make -k i pozwala mi skompilować kod. Chciałbym użyć Clanga (lub prawdopodobnie GCC 4.8 po jego zainstalowaniu) jako domyślnego kompilatora. Mam cc aliasowany na clang -Wall -Werror -std=c99 -ggdb -O0 i podczas gdy ten wywołuje Clang z wiersza poleceń poza Emacsem, wywołanie M-x compile z wewnątrz Emacsa wciąż wydaje się być aliasem cc do GCC w wersji 4.7, co właśnie zainstalowałem. Chciałbym skorzystać z bogatszych i bardziej zrozumiałych komunikatów o błędach i ostrzeżeniach dostarczanych przez Clang (i GCC 4.8), ale nie chcę tworzyć oddzielnych plików Makefile dla każdego krótkiego programu na poziomie studenta, który piszę, ponieważ obecnie przechodzę przez K & R w tym rozwiązywanie ćwiczeń.Zmień domyślny kompilator w Emacs?

Jak przekonać Emacs, że M-x compile i make -k powinny wywoływać Clang (lub GCC 4.8) zamiast starszej wersji GCC?

Odpowiedz

1

Można napisać plik Makefile i jawnie używać klanga na linii kompilacji.

Coś jak to będzie działać:

 
CC=clang 
CFLAGS= -Wall -Werror -std=c99 -ggdb -O0 

%: %.c 
	$(CC) $(CFLAGS) $^ -o [email protected] 

Zauważ, że ostatni wiersz musi zaczynać się na karcie, aby faktycznie pracują.

8

To nie jest emacs, to jest marka. Domyślnie jest używana zmienna środowiskowa CC, która z kolei jest domyślnie ustawiona na gcc. Wystarczy uruchomić ten przed rozpoczęciem emacs (zakładając, że używasz Unix):

$ export CC=clang 

Ewentualnie użyć makefile, który określa CC bezpośrednio.

+0

Nie mam tego ustawionego jako zmienna środowiskowa, ale mam 'cc' (małe litery) aliasowane w mojej powłoce do' clang' z wyżej wymienionymi opcjami i mam tę linię ustawioną w obu moich '. profile' i '.bashrc'. Wpisanie cc z wiersza poleceń poprawnie uruchamia 'clang' zamiast' gcc'. Czy zamiast tego powinienem wyeksportować go jako zmienną 'env'? A jeśli tak, to prawdopodobnie, użyj konwencji zmiennej 'env' dla ALL CAPS? – haziz

+0

@haziz - tak, kapitele są niezbędne – teppic

1

Zakładając, że w makefile, używasz $(CC) do kompilacji kodu, można wykonać jedną z następujących czynności:

  • Kiedy robisz M-x compile można zmienić polecenia kompilacji do CC=clang make -k.

  • Dodaj następujący wiersz w pliku .emacs:

    (setq compile-command "CC=clang make -k")

0

Można też zrobić to bez make. @Lazylabs wspomniał, że możesz zmienić wartość compile-command. Aby ustawić go na tryb, dodaj to do swojej konfiguracji Emacsa:

(add-hook 'c-mode-hook 
     (lambda() 
     (setq compile-command 
       (concat "clang -Wall -Werror -std=c99 -ggdb -O0" buffer-file-name)))) 

Będzie używać domyślnie nazwy pliku.