如何编译单个文件c++程序,打印输出以编译缓冲区,如果编译成功则运行c++可执行文件,并附加c++可执行文件的输出以编译输出。
下面的elisp代码可以编译与缓冲区名称相同的c++程序。现在,如何运行可执行表的输出并将其附加到编译缓冲区
(defun cpp-single-file-compile ()
(interactive)
(save-buffer)
(compile
(concat "g++ -g " (buffer-file-name) " -o " (file-name-sans-extension (buffer-file-name)))))
(add-hook 'c++-mode-hook (lambda () (local-set-key "\C-c\C-c" 'cpp-single-file-compile)))
发布于 2013-11-18 06:06:11
解决办法很简单。编译后执行
(defun cpp-single-file-compile ()
(interactive)
(save-buffer)
(compile
(concat "g++ -g " (buffer-file-name) " -o " (file-name-sans-extension (buffer-file-name))
" && " (file-name-sans-extension (buffer-file-name)) ".exe")))
(add-hook 'c++-mode-hook (lambda () (local-set-key "\C-c\C-c" 'cpp-single-file-compile)))
发布于 2013-11-15 14:20:23
此外,对于您的代码,我在hack-local-variables
命令中有一个C-c C-c
:
(defun compileCompileCommand ()
"Compile current file."
(interactive)
(hack-local-variables)
(unless file-local-variables-alist
(setq compile-command (concat "g++ -g " (buffer-file-name) " -o " (file-name-sans-extension (buffer-file-name))
" && " (file-name-sans-extension (buffer-file-name)) ".exe")))
(compile compile-command))
(add-hook 'c-mode-common-hook '(lambda ()
(local-set-key (kbd "C-c C-c") 'compileCompileCommand)))
然后将局部变量添加到源文件中。示例:
#include <iostream>
int main() {
std::cout << "Test";
return 0;
}
/*
Local Variables:
compile-command: "g++ -g test.cc && ./a.exe"
End:
*/
因此,您可以根据每个文件决定您想要做什么。由于compile-command
的原因,下一次编译时会考虑hack-local-variables
的更改。
产出如下:
-*- mode: compilation; default-directory: "/c/temp/" -*-
Compilation started at Fri Nov 15 15:22:34
g++ -g test.cc && ./a.exe
Test
Compilation finished at Fri Nov 15 15:22:34
编辑:有时需要链接一些额外的库或指定一些额外的包含路径。因此,我不能接受Talespin_Kit的答案作为一个完整的解决方案。我认为在上面编辑的版本中给出的组合更好。如果给定局部变量,则使用原始的compile-command
,否则将使用自动生成的compile-command
。注意,还可以使用assq
检查compile-command
是否是局部变量的成员。
https://stackoverflow.com/questions/20002849
复制相似问题