配置Emacs FlyMake使用Rakefile和Makefile

4

我已经学习使用Emacs有一段时间了,到目前为止非常喜欢它。

我的问题是,对于一些小的C代码,我更喜欢使用Rake而不是Make。然而,flymake似乎只能使用Make,因为它抱怨找不到Makefile。从命令行中使用Rake的方式与Make相同,所以我想知道是否有一些emacs配置可以输入,以允许flymake使用Rake?

稍微更正一下我的做法。我实际上并没有编辑Rakefile。而且flymake-ruby也没有帮助。我正在处理C代码。我只是使用RAKE来编译C代码,使用gcc而不是MAKE。

3个回答

2

好的,现在我明白了;对于之前的混淆感到抱歉。

快速浏览flymake.el后,对于*.c文件,'make'调用最终来自于这里:

(defun flymake-get-make-cmdline (source base-dir)
  (list "make"
    (list "-s"
          "-C"
          base-dir
          (concat "CHK_SOURCES=" source)
          "SYNTAX_CHECK_MODE=1"
          "check-syntax")))

那个函数被flymake-simple-make-init所调用,因为*.c文件被映射到flymake-allowed-file-name-masks。所以,正确的答案应该是修改flymake-allowed-file-name-masks,将*.c文件映射到另一个init defun, 然后编写那个defun来按照你想要的方式调用rake。对于各种事物,已经有一堆这样的defuns被编写了,而且它们大多数都非常简短明了,所以即使你不知道Emacs Lisp,你也可以通过最少的改动使某些东西工作。(真正正确的答案是改变flymake-simple-make-init,使其从defcustom变量中读取命令名称,然后提交该更改至上游...)
鉴于你说只需要使用与'make'相同的参数来调用'rake',那么快速而肮脏的答案就是获取flymake.el的副本,将其放在你的load-path早期,并在flymake-get-make-cmdline中操纵'make'字符串,将其改为'rake'。这样至少可以让你进入下一步...

0

Rake是Ruby语法,所以只需在文件中启用flymake for rby即可。此链接是某人的elisp代码,用于执行此操作。EmacsWiki 有很多相关内容。(实际上,您应该总体上阅读EmacsWiki,那里有很多有用的东西。)


谢谢EmacsWiki。我会阅读那个。但是,你给我的是关于ruby-mode的信息。我在谈论c-mode。我只是使用Rake构建系统来构建C代码。当我尝试使用flymake时,它抱怨找不到Makefile。但我想让它使用Rakefile。 - Jon Gretar

0

不,我已经安装了 flymake Ruby。它只允许我在编辑 Rakefile 时输入 flymake-mode。但这不是我正在做的事情。我没有编辑 Ruby 文件,而是 C 文件。我只想让 flymake 使用 rake 编译 C 文件,而不是使用 make。 - Jon Gretar

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