在gcc中构建C程序并使用Emacs

时间:2015-11-22 01:23:48

标签: emacs

我正在学习编程,这需要我编写和运行许多小程序,所以我不能为每个程序创建一个makefile。我想创建一个命令,它将获取当前打开的文件,使用gcc(带参数)编译它并使用valgrind(带参数)运行它,同时允许我与它交互(可能通过打开另一个shell窗口)。可能吗?如果是的话,该怎么做?

2 个答案:

答案 0 :(得分:3)

您可以通过编写

将编译命令存储在缓冲区中
// -*- compile-command: "gcc -o foo foo.c && valgrind foo" -*-

在第一行。

您可能希望执行(put 'compile-command 'safe-local-variable 'stringp)以防止Emacs向您发出有关文件局部变量的警告(但意识到不受信任的文件可能会发生恶意事件)。

我有一个yasnippet片段,用于将其添加到一次性文件中。

# -*- mode: snippet -*-
# name: compile
# key: compile
# expand-env: ((file (if (buffer-file-name) (file-name-nondirectory (buffer-file-name)) (buffer-name))))
# --
// -*- compile-command: "gcc -DDEBUG=9 -ansi -Wall -g3 -std=c99 -o ${1:$(file-name-sans-extension yas-text)} ${1:`file`}" -*-

答案 1 :(得分:2)

  

我正在学习编程,这需要我编写和运行许多小程序,所以我不能为每个程序创建一个makefile。

正如我在评论中提到的,我不理解这种逻辑,但如果你每次运行M-x compile时都坚持输入命令并将命令更改为你想要的任何命令(例如{{1} }或gcc -Wall --foo file.c),然后点击valgrind myapp arg1 arg2

下次在同一个Emacs会话中运行RET时,它会建议上一个命令。这应该可以为您节省一些按键。