我正在学习编程,这需要我编写和运行许多小程序,所以我不能为每个程序创建一个makefile。我想创建一个命令,它将获取当前打开的文件,使用gcc(带参数)编译它并使用valgrind(带参数)运行它,同时允许我与它交互(可能通过打开另一个shell窗口)。可能吗?如果是的话,该怎么做?
答案 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
时,它会建议上一个命令。这应该可以为您节省一些按键。