我在Emacs中使用M-x compile
来编译我的C代码,然后启动make -k
并允许我编译代码。我希望在安装它之后使用Clang(或者可以想象为GCC 4.8)作为默认编译器。我有cc
别名为clang -Wall -Werror -std=c99 -ggdb -O0
,虽然这从Emacs外部的命令行调用Clang
,但从Emacs中调用M-x compile
仍然似乎是cc
的别名GCC 4.7版本就是我安装的。我希望利用Clang(和GCC 4.8)提供的更丰富,更易理解的错误和警告信息,但不希望为我写的每个简短的学生级程序创建单独的makefile,因为我目前正在通过K& R包括解决练习。
如何说服Emacs M-x compile
和make -k
应该调用Clang(或GCC 4.8)而不是旧版本的GCC?
答案 0 :(得分:8)
这不是emacs,而是make。它默认使用环境变量CC,后者默认为gcc。只需在启动emacs之前运行它(假设您使用的是Unix):
$ export CC=clang
或者,使用直接指定CC的makefile。
答案 1 :(得分:2)
您可以编写一个makefile,并在编译行中显式使用clang。
这样的事情会起作用:
CC=clang CFLAGS= -Wall -Werror -std=c99 -ggdb -O0 %: %.c 	$(CC) $(CFLAGS) $^ -o $@
请注意,最后一行需要以制表符开头才能实际运作。
答案 2 :(得分:1)
假设在makefile中使用$(CC)
编译代码,可以执行以下操作之一:
执行M-x compile
时,您可以将编译命令更改为CC=clang make -k
。
在.emacs
文件中添加以下行:
(setq compile-command "CC=clang make -k")
答案 3 :(得分:0)
您也可以在没有make
的情况下执行此操作。 @Lazylabs提到您可以更改compile-command
的值。要使其特定于模式,请将其添加到您的Emacs配置中:
(add-hook 'c-mode-hook
(lambda ()
(setq compile-command
(concat "clang -Wall -Werror -std=c99 -ggdb -O0" buffer-file-name))))
默认使用当前文件名。