如何在 Vim 中编译 C 程序,但不编译到当前目录?

如何在 Vim 中编译 C 程序,但不编译到当前目录?

所以我在 Vim 中使用了一段时间的命令是:

map <F10> :w<CR> :!clear; make %<<CR> :!./%<<CR>

它获取文件的当前名称,编译然后运行它。然而,这会污染我的目录,当我想将它们上传到 github 时,我必须在上传之前删除所有不带扩展名的文件。

我想做的是将它们全部编译成垃圾桶目录,所以我尝试将命令修改为以下内容:

map <F10> :w<CR> :!clear; make -C bin %<<CR> :!./bin/%<<CR>

我看到该-C命令更改了目录,但这不起作用,因为我收到错误:

*** no rule to make target '17'. Stop. 

我该怎么做才能使这个命令正常工作?

map <F10> :w<CR> :!clear; make -C bin %<<CR> :!./bin/%<<CR>

答案1

您将 Vim 的命令:make与操作系统可执行文件混淆了make(1)。当您make在 Vim 的命令行中键入时,您正在运行 Vim 的:make命令。这样做的效果之一是运行由 Vim 的 option 定义的操作系统命令makeprg

现在,makeprg碰巧具有默认值make,因此操作系统命令make(1)也会运行。但 Vim 的命令:make不接受选项,因此传递-C binVim 的命令行并不意味着make -C bin正在运行。如果您想更改运行的操作系统命令,您需要执行以下操作:

let &makeprg = 'make -C /path/to/bin'

然后在Vim中运行:make就会运行OS命令make -C /path/to/bin

然而,正如评论中指出的,处理这个问题的更好方法是首先避免问题,并将所有不相关的文件添加到.gitignore.否则,迟早您仍然会向 Git 存储库提交对象文件以及其他内容。

相关内容