编译
Emacs能够以子进程的形式运行非交互式语言的编译器,例如C、Fortran等的编译器,能够把编译错误的记录放进到Emacs的缓冲区中。它也能够贴出错误的信息和显示出编译错误源代码的行。
M-x compile 在Emacs下异步地运行编译器,错误的信息将会输进到‘*compilation*’缓冲   
            区
M-x recompile 以上一次同样的参数调用编译器
M-x kill-compilation 停止运行编译子进程
  运行‘make’或者其它的编译命令,输入‘M-x compile’。这个名令在小缓冲区里读取一个shell 命令,然后在下一级的shell里执行这个命令,把输出放到名叫‘*compilation*’的缓冲区中。这个当前缓冲区的标准目录被用作执行这个命令工作目录。因此,通常编译发生在这个目录下。
  默认的编译命令通常是‘make -k’,这个命令在非交互程序下大部分的情况是正确的。请参看Make的部分。如果你之前用过‘M-x compile’命令,默认的命令是你之前输入的哪个。
‘compile’储存这个名令在‘compile-command’变量之中,你可以设置默认的编译命令在‘compile-command’之中。如果一个文件指定一个文件路径变量给‘compile-command’,那么在你输入‘M-x compile’的时候,将会提供你指定的默认文件路径。可以参看File-Variables
  开始编译‘*compilation*’缓冲区将会显示,但是没有选中它。缓冲区的mode line将会告诉你编译是否完成,其中有run、signal或者exit在圆括号中。你不必保持这个缓冲区可视化,编译在任何时候都在进行着。当编译在进行时,会显示compiling,当这个字符串消失,编译就完成了。
  如果你想看编译的记录,交换到‘*compilation*’缓冲区和把输入点切换到这个缓冲区的末尾。当输入点在末尾的时候,新的编译输出插入到输入点的上面,输入点将保持在末尾。
如果输入点不在缓冲区的末尾,当更多的编译输出添加到缓冲区的末尾,它将保持固定位置。
  如果你给改变‘compilation-scroll-output’这个变量,把它设置为‘nil’值,编译缓冲区将会自动地跟随输出的而滚动。如果设置这个值为‘first-error’,滚动将会停止在第一个编译出错的地方,输入点跳到这个出错的处。对于任何非‘nil’的值,缓冲区继续滚动知道没有更多的输出。
  运行同上一次同样编译,输入‘M-x recompile’。这将自动地再次使用使一次编译的参数。它也会再是使用编译缓冲区而且开始在默认的目录下编译。
  当编译进程结束,无论是什么原因,编译缓冲区将会输出exit(跟着代码0表示正常结束) 或者 signal(结束进程)。
  开始一个新的编译将会关闭任何已经存在的编译缓冲区,由于那个缓冲区在任何时候只能处理一个编译。然而,M-x compile将会问你是否确认关闭正在运行的编译。你也能够关闭编译进程使用‘M-x kill-compilation’。
  如果你想一次运行来年各个编译,你应该开始第一个,然后从命名‘*compilation*’缓冲区,之后开始另一个编译。这将会创建里一个新的‘*compilation*’缓冲区。
  Emacs不期望一个编译器进程去运行一个异步的子进程,如果它这么做了,而且在编译进程结束了,子进程还在保持运行,Emacs可能关闭这个子进程或者子进程的输出不能送到emacs中。为了避免这个情况,确保主进程保持直到子进程结束。在一个shell 脚本中,你能够用‘$!' 和 'wait',像这样:
(sleep 10;echo 2nd)& pid=$! 记录子进程的pid
 echo first message
 wait $pid 等待子进程
如果后台进程没有输出到编译缓冲区,你只需要阻止它被关闭直到住编译进程结束。
编译模式
‘*compilation*’缓冲区使用一个编译模式,着个模式的特性是提供了一个方便的方式去查看对应错误信息的代码行。这些命令在其他指定的缓冲区也是有效的,例如M-x grep和M-x
occur模式。
M-g M-n
M-g n
C-x `
查看下一条错误信息或者标记
M-g M-p
M-g p
查看前一条错误信息或标记
<RET> 
查看输入点所在的错误信息
Mouse-2
查看你点中的错误信息
M-n
查找和高亮标记处下一条错误信息,但是没有选中源代码缓冲区中出错误的源代码
M-p
情况同上,不过查上一条
M-}
在另一个文件中查找下一个错误
M-{
同上,不过是上一个文件
C-c C-f
跟随在副模式触发下一个错误,这是鼠标动作在编译缓冲区产生自动源代码显示。
Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐