在Emacs上交叉编译

时间:2015-01-21 14:23:21

标签: emacs emacs23

如何在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键,则可以获得奖励。

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

2 个答案:

答案 0 :(得分: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")

BTW,您的export PATH= ...可以添加,例如在您的~/.bashrc中,或者您可以使用相应的make运行精确PATH的shell脚本,并将该脚本作为您的Emacs compilation-command(甚至可能是"暂时",即仅在您的emacs会话中)

答案 1 :(得分:2)

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

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