我一直在使用Emacs进行基本的文本编辑,但截至今天我正在尝试将它用于c ++编译。我在过去的几个小时里一直在寻找如何解决这个问题,但我一直在他们的技术上遇到障碍(我认为其中一些与教程已经过时有关)。
基本上,我想要做的就是能够通过'M-x compile'命令编译我在Emacs中编写的C ++程序。
到目前为止,我已经安装了Cygwin并下载了gcc的软件包。我尝试过在线教程提供的其他一些解决方案,但他们并没有成功。
谢谢。
答案 0 :(得分:9)
安装编译器后。您可以使用以下代码段来自定义编译命令
(add-hook 'c++-mode-hook
(lambda ()
(unless (file-exists-p "Makefile")
(set (make-local-variable 'compile-command)
(let ((file (file-name-nondirectory buffer-file-name)))
(concat "g++ -g -O2 -Wall -o "
(file-name-sans-extension file)
" " file))))))
答案 1 :(得分:3)
你可以尝试MinGW - "Minimalist GNU for Windows."我不记得如何配置emacs从M-x编译调用自定义构建工具,但它应该是可能的。这是我刚刚遇到的一个链接,可能是一个起点。
http://www.cae.tntech.edu/help/programming/free-programming-tools-windows
答案 2 :(得分:3)
为您的程序编写一个Makefile,并使用“make -k”代表“M-x compile”,如Emacs文档所示。使用make
(或类似的构建工具)比为GCC重新命名命令行更好,而不仅仅是为Emacs。
答案 3 :(得分:3)
M-x compile
命令调用shell(例如linux bash
,windows cmd.exe
等)来运行make
命令。在Windows上我认为emacs默认为cmd.exe
shell(通过特殊的C:/Program Files/Emacs/emacs/bin/cmdproxy.exe
可执行文件)。
如果您希望M-x compile
使用其他shell(可能是您的案例中为cygwin bash
),则需要通过更改shell-file-name
变量或使用{{1}来告诉emacs环境变量。您还需要通过更改SHELL
变量(或使用make
环境变量)来确保找到cygwin exec-path
。
要做到这一点:
PATH
您还可以查看setup-cygwin.el为cygwin设置此内容以及其他一些内容。
答案 4 :(得分:0)
如果在Cygwin中安装Emacs和g ++,它应该像Linux一样工作,也就是说你可以运行M-x compile
并使用g++ myFile.cpp
作为编译命令。如果您正在使用“原生”Emacs for Windows,或混合使用Cygwin / MinGW /等,事情会变得复杂一些(其他答案都有解决方案),但归结为确保您的环境变量设置正确(例如PATH,SHELL等)。最终,如果你不能在命令行上运行它(来自Cygwin或MinGW的cmd.exe或/ bin / bash),它将无法在任何Emacs中运行。
例如,我使用来自Cygwin的SCons / g ++和来自MS Visual Studio的devenv.com在Emacs中编译C ++。这当然需要安装SCons和Visual Studio,但这是可能的。 SCons从Cygwinports(http://sourceware.org/cygwinports/)安装,最终在/ usr / bin中,这是在标准路径中,但devenv.com深埋在Visual Studio中;要访问它,我将它的目录添加到我的PATH(在我的〜/ .bash_profile中):
case $OS in
Windows_NT)
case "`uname -s`" in
CYGWIN_NT*)
PATH=${PATH}:"/cygdrive/c/Program Files (x86)/Microsoft Visual Studio 10.0/Common7/IDE/"
;;
MINGW32_NT*)
PATH=${PATH}:"/c/Program Files (x86)/Microsoft Visual Studio 10.0/Common7/IDE/"
;;
esac
esac
然后我构建了一个scons
或devenv.com -build "Release|Platform MySolution.sln
的编译命令,事情从那里开始。您可以根据需要进行复杂化(在我当前的项目中,我有构建和测试shell脚本,可以调用scons
和devenv.com
;我倾向于避免使用批处理文件,因为shell更强大)。我唯一的抱怨是微软改变了错误的输出,因此编译器输出中的代码自动跳转到目前的行(我需要考虑修复它)。
我假设您来自Emacs的“原生”版本,在这种情况下,您可能还会发现Emacs的cygwin-mount模块很有用。