【问题标题】:Cross compile on Emacs在 Emacs 上交叉编译
【发布时间】:2015-01-21 14:23:20
【问题描述】:

如何在 Emacs 上创建/发出编译命令,这样我就不需要在它和控制台之间来回切换?我希望看到的通常的编译过程是 Emacs 命令:

$ export PATH=/toolchain/gcc-linaro-arm-linux-gnueabihf-4.7/bin:$PATH
$ cd my/project 
$ make CROSS_COMPILE=arm-linux-gnueabihf- all

我尝试在instructions 之后创建自己的M-x compile 命令版本,但由于我对 Lisp 和 Emacs 内部结构不够熟悉而失败了。请注意,有问题的项目很大(即内核)具有多个目录和 Makefile,因此上一个链接中描述的方法(最近的 Makefile、默认目录等)不是解决方案。如果您可以将其绑定到单个键(例如现代 IDE 上的 Fx 键),则可以加分。

附:我知道有similar question,但它已经过时并且不包括交叉编译问题,我希望现在有更好的解决方案。

【问题讨论】:

  • 这些天你为什么不用emacs24
  • 默认情况下,我的发行版没有 emacs24 包。现在更新了,反正应该没什么大区别。

标签: emacs emacs23


【解决方案1】:

您可以创建一个在特定目录中运行特定编译命令的自定义函数,如下所示:

(defun my-compile ()
  (interactive)
  (let ((default-directory "~/my/project"))
    (compile "export PATH=/toolchain/gcc-linaro-arm-linux-gnueabihf-4.7/bin:$PATH && make CROSS_COMPILE=arm-linux-gnueabihf- all")))

然后将它绑定到一些方便的键上:

(global-set-key [f12] 'my-compile)

【讨论】:

  • 在 ~/.emacs 中添加了这些行,但是当我按 F12 时出现错误:Wrong type argument: commandp, my-compile
  • 对,我忘了(interactive),它让函数绑定到一个键。见编辑。
  • make 使用正确的参数调用,但找不到工具链。我尝试添加 setenv "PATH"setq exec-path 无济于事。
【解决方案2】:

Ctrl U Meta x compile 应该问你使用什么编译命令。你可以输入make CROSS_COMPILE=arm-linux-gnueabi all

否则,配置你的compilation-command Emacs 变量,也许在你的~/.emacs;并且您可以将其设为文件局部变量。

您可以在~/.emacs 中添加以下未经测试的行

 (load-library "compile")
 (global-set-key [f12] 'recompile)
 (setq compilation-command "make CROSS_COMPILE=arm-linux-gnueabihf all")

顺便说一句,您的 export PATH=... 可以添加,例如在您的~/.bashrc 中,或者您可以使用适当的PATH 运行确切的make 并让该脚本成为您的Emacs compilation-command(甚至可能是“临时”,即仅在您的emacs 会话中)

【讨论】:

  • 正如问题中提到的,我试过玩这个命令,但这个解决方案仍然没有解决几个关键问题:1)我如何添加工具链? 2)它仍然需要大量的打字和按键,关键是有比切换到控制台更快的解决方案,是否可以设置默认值(目录,制作标志)或自动化这个过程?
  • @KBart 我想你只是忘记使用M-x recompile 而不是M-x compile 每次你想重新编译。不应该再打字了。
  • @Basile Starynkevitch,它仍然没有添加工具链,所以这个函数调用系统编译器。看 legoscia 的回答,它几乎是正确的,唯一缺少的是正确的 $PATH。
  • 顺便说一句,将工具链添加到 ~/.bashrc 不是一种选择,因为我在不同的项目中使用了几个不同的工具链。
  • 您可以添加一些调用make 的脚本并将其用作编译命令。
猜你喜欢
  • 1970-01-01
  • 2012-03-03
  • 2012-08-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-05
  • 2011-11-05
  • 2011-05-18
相关资源
最近更新 更多