【问题标题】:Change Default Compiler Within Emacs?更改 Emacs 中的默认编译器?
【发布时间】:2013-04-02 23:35:32
【问题描述】:

我在 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?

【问题讨论】:

    标签: c gcc emacs makefile clang


    【解决方案1】:

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

    $ export CC=clang
    

    或者,使用直接指定 CC 的 makefile。

    【讨论】:

    • 我没有将它设置为环境变量,但我确实在我的外壳中使用上面列出的选项将cc(小写字母)别名为clang,并且确实设置了该行在我的 .profile 和 .bashrc 文件中。从命令行键入 cc 正确启动 clang 而不是 gcc。我应该将其导出为env 变量吗?如果是,大概是使用全部大写的env 变量约定?
    • @haziz - 是的,大写字母是必不可少的
    【解决方案2】:

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

    这样的事情会起作用:

    抄送=叮当声 CFLAGS= -Wall -Werror -std=c99 -ggdb -O0 %: %。C $(CC) $(CFLAGS) $^ -o $@

    请注意,最后一行需要以制表符开头才能真正起作用。

    【讨论】:

      【解决方案3】:

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

      • M-x compile时,可以将编译命令改为CC=clang make -k。

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

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

      【讨论】:

        【解决方案4】:

        您也可以不使用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))))
        

        默认使用当前文件名。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-01-24
          • 1970-01-01
          • 2023-04-08
          • 2011-12-11
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-02-26
          相关资源
          最近更新 更多