在Emacs中更改默认编译器?

5
我在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(《The C Programming Language》)并解决练习题。
如何说服Emacs在M-x compilemake -k调用Clang(或GCC 4.8)而不是旧版本的GCC?
4个回答

9

这不是emacs,而是make。它默认使用环境变量CC,该变量默认使用gcc。假设您正在使用Unix,请在开始emacs之前运行以下命令:

$ export CC=clang

或者使用一个指定 CC 的 makefile。


我没有将其设置为环境变量,但是我在我的shell中将cc(小写字母)别名设置为具有上述选项的clang,并且在我的.profile.bashrc文件中都设置了该行。从命令行键入cc会正确地启动clang而不是gcc。我应该将其导出为env变量吗?如果是,那么想必要使用全大写的env变量约定? - haziz
@haziz - 是的,大写字母是必要的。 - teppic

2

您可以编写一个Makefile,然后在编译行上明确使用clang。

像这样的东西会起作用:

CC=clang
CFLAGS= -Wall -Werror -std=c99 -ggdb -O0
%: %.c $(CC) $(CFLAGS) $^ -o $@

请注意,为了实际工作,最后一行需要以制表符开头。


1
假设在您的 makefile 中,您正在使用 $(CC) 编译代码,您可以执行以下操作之一:
  • 当您执行 M-x compile 时,您可以将编译命令更改为 CC=clang make -k

  • 在您的 .emacs 文件中添加以下行:

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


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))))

默认情况下,它将使用当前文件名。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接