在Windows上使用Emacs编译C ++程序

时间:2009-04-11 21:47:16

标签: c++ emacs gcc ide

我一直在使用Emacs进行基本的文本编辑,但截至今天我正在尝试将它用于c ++编译。我在过去的几个小时里一直在寻找如何解决这个问题,但我一直在他们的技术上遇到障碍(我认为其中一些与教程已经过时有关)。

基本上,我想要做的就是能够通过'M-x compile'命令编译我在Emacs中编写的C ++程序。

到目前为止,我已经安装了Cygwin并下载了gcc的软件包。我尝试过在线教程提供的其他一些解决方案,但他们并没有成功。

谢谢。

5 个答案:

答案 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

然后我构建了一个sconsdevenv.com -build "Release|Platform MySolution.sln的编译命令,事情从那里开始。您可以根据需要进行复杂化(在我当前的项目中,我有构建和测试shell脚本,可以调用sconsdevenv.com;我倾向于避免使用批处理文件,因为shell更强大)。我唯一的抱怨是微软改变了错误的输出,因此编译器输出中的代码自动跳转到目前的行(我需要考虑修复它)。

我假设您来自Emacs的“原生”版本,在这种情况下,您可能还会发现Emacs的cygwin-mount模块很有用。