2013-04-02 39 views
5

Tôi sử dụng M-x compile trong Emacs để biên dịch mã C sau đó khởi tạo make -k và cho phép tôi biên dịch mã. Tôi muốn sử dụng Clang (hoặc conceivably GCC 4.8 sau khi tôi cài đặt nó) như trình biên dịch mặc định. Tôi có cc bí danh là clang -Wall -Werror -std=c99 -ggdb -O0 và trong khi điều này gọi Clang từ dòng lệnh bên ngoài Emacs, gọi M-x compile từ bên trong Emacs vẫn có vẻ là bí danh cc thành GCC phiên bản 4.7 mà tôi đã cài đặt. Tôi muốn khai thác các thông báo lỗi và cảnh báo phong phú hơn và dễ hiểu hơn được cung cấp bởi Clang (và GCC 4.8) nhưng không muốn tạo ra một makefile riêng cho mỗi chương trình ngắn cấp tôi đang viết, vì tôi hiện đang trải qua K & R bao gồm giải quyết các bài tập.Thay đổi Trình biên dịch Mặc định Trong Emacs?

Làm cách nào để thuyết phục Emacs rằng M-x compilemake -k nên gọi Clang (hoặc GCC 4.8) thay vì phiên bản cũ hơn của GCC?

Trả lời

1

Bạn có thể viết một makefile và sử dụng một cách rõ ràng clang trên dòng biên dịch.

Something như thế này sẽ làm việc:

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

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

Lưu ý rằng dòng cuối cùng cần phải bắt đầu với một tab để thực sự làm việc.

8

Đây không phải là biểu tượng cảm xúc. Nó mặc định sử dụng biến môi trường CC, biến này mặc định là gcc. Chỉ cần chạy điều này trước khi bạn bắt đầu emacs (giả sử bạn đang sử dụng Unix):

$ export CC=clang 

Ngoài ra, sử dụng một makefile mà xác định CC trực tiếp.

+0

Tôi không đặt biến môi trường nhưng tôi có 'cc' (chữ nhỏ) được đặt trong vỏ của tôi thành' clang' với các tùy chọn được liệt kê ở trên và đặt dòng đó trong cả hai ký tự '. hồ sơ' và '.bashrc' tệp. Gõ cc từ dòng lệnh chính xác bắt đầu 'clang' thay vì' gcc'. Tôi có nên xuất nó dưới dạng biến 'env' thay thế không? Và nếu có, có lẽ, sử dụng quy ước biến 'env' của ALL CAPS? – haziz

+0

@haziz - vâng, thủ đô là điều cần thiết – teppic

1

Giả sử rằng trong makefile của bạn, bạn đang sử dụng $(CC) để biên dịch mã của bạn, bạn có thể làm một trong các cách sau:

  • Khi bạn làm M-x compile, bạn có thể thay đổi các lệnh biên dịch để CC=clang make -k.

  • Thêm dòng sau trong file .emacs của bạn:

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

0

Bạn cũng có thể làm điều đó mà không make. @Lazylabs đã đề cập rằng bạn có thể thay đổi giá trị của compile-command. Để làm cho chế độ này cụ thể, hãy thêm cấu hình này vào cấu hình Emacs của bạn:

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

Nó sẽ sử dụng tên tệp hiện tại theo mặc định.

Các vấn đề liên quan