5

M-x compile在 Emacs 中使用来编译我的 C 代码,然后启动make -k并允许我编译代码。我希望使用 Clang(或者可能是安装后的 GCC 4.8)作为默认编译器。我有cc别名clang -Wall -Werror -std=c99 -ggdb -O0,虽然它Clang是从 Emacs 外部的命令行调用的,M-x compile但从 Emacs 内部调用似乎仍然cc是我安装的 GCC 版本 4.7 的别名。我希望利用 Clang(和 GCC 4.8)提供的更丰富、更易于理解的错误和警告消息,但不希望为我正在编写的每个学生级短程序创建单独的 makefile,因为我目前正在经历 K&R,包括解决练习。

我如何说服 EmacsM-x compile并且make -k应该调用 Clang(或 GCC 4.8)而不是旧版本的 GCC?

4

4 回答 4

8

这不是emacs,这是make。它默认使用环境变量 CC,而 CC 又默认为 gcc。在启动 emacs 之前运行它(假设您使用的是 Unix):

$ export CC=clang

或者,使用直接指定 CC 的生成文件。

于 2013-04-02T23:46:29.277 回答
2

您可以编写一个makefile,并在编译行显式使用clang。

像这样的东西会起作用:

抄送=叮当
CFLAGS= -Wall -Werror -std=c99 -ggdb -O0

%: %。C
	$(CC) $(CFLAGS) $^ -o $@

请注意,最后一行需要以选项卡开头才能实际工作。

于 2013-04-02T23:44:44.723 回答
1

假设在您的 makefile 中,您$(CC)用于编译代码,您可以执行以下操作之一:

  • 当您这样做时M-x compile,您可以将编译命令更改为CC=clang make -k.

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

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

于 2013-04-03T18:36:19.643 回答
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))))

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

于 2013-05-15T20:22:22.770 回答