Компиляция программ C++ с помощью Emacs в Windows

Я использую Emacs в течение некоторого времени для базового редактирования текста, но на сегодняшний день я пытаюсь использовать его для компиляции C++. Я искал последние несколько часов о том, как это сделать, но я продолжаю поражать блокпосты в своих методах (я думаю, что некоторые из них связаны с устаревшими учебниками).

в принципе, все, что я хочу сделать, это иметь возможность компилировать программы на C++, которые я пишу в Emacs через команду "M-x compile".

пока у меня есть установил Cygwin и загрузил пакеты для gcc. Я попробовал некоторые другие решения, представленные учебниками онлайн, но они не сработали.

спасибо.

5 ответов


на M-x compile команда вызывает оболочку (например, linux bash, windows cmd.exe и т. д.) Для выполнения . В windows я думаю, что Emacs по умолчанию cmd.exe shell (через специальный C:/Program Files/Emacs/emacs/bin/cmdproxy.exe исполняемый).

если вы хотите M-x compile использовать другую оболочку (возможно cygwin bash в вашем случае), то вам нужно сказать emacs через изменение shell-file-name переменная или использование SHELL переменные среды. Вам также нужно будет убедиться, что cygwin make найдено путем изменения exec-path переменной (или с помощью PATH переменные среды).

для этого:

(setq shell-file-name "C:/cygwin/bin/bash.exe") 
(setq exec-path (cons "C:/cygwin/bin" exec-path))

и вы также можете посмотреть на настройка-cygwin.el чтобы настроить это и некоторые другие вещи для cygwin.


после установки компилятора. Вы можете использовать следующий фрагмент для настройки команды компиляции

(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))))))

можно попробовать MinGW - " минималистский GNU для Windows." Я не могу вспомнить, как настроить emacs для вызова пользовательских инструментов сборки из компиляции M-x, но это должно быть возможно. Вот ссылка, с которой я только что столкнулся, которая может быть отправной точкой.

http://www.cae.tntech.edu/help/programming/free-programming-tools-windows


напишите файл Makefile для вашей программы и используйте "make-k" для "M-x compile", как предложено в документации Emacs. Используя make (или аналогичные инструменты сборки) лучше, чем перепечатывать командные строки для GCC в целом, а не только для Emacs.


если вы устанавливаете Emacs и g++ в Cygwin, он должен работать так же, как Linux, то есть вы можете запустить M-x compile и использовать g++ myFile.cpp Как ваша команда компиляции. Если вы используете "родной" Emacs для Windows или смешиваете Cygwin/MinGW/etc, все становится немного сложнее (и у других ответов есть решения), но это сводится к тому, чтобы убедиться, что ваши переменные среды настроены правильно (например, путь, оболочка и т. д.). В конечном счете, если вы не можете запустить его в командной строке (либо в УМК.exe или /bin / bash от Cygwin или MinGW), он не будет работать ни в одном Emacs.

в качестве примера я компилирую C++ в Emacs, используя как SCons / g++ из Cygwin, так и devenv.com из MS Visual Studio. Это, конечно, требует установки SCons и Visual Studio, но это возможно. SCons устанавливается из Cygwinports (http://sourceware.org/cygwinports/) и заканчивается в /usr / bin, который находится в стандартном пути, но devenv.com похоронен глубоко в Visual Studio; чтобы получить доступ к нему, я добавляю его содержащий каталог к моему пути (в моем ~/.файл):

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, и оттуда все идет весело. Вы можете получить так сложно, как вам нужно (в моем текущем проекте у меня есть сборка и тестирование скриптов, что вызов в scons и devenv.com; Я склонен избегать пакетных файлов, так как оболочка намного мощнее). Моя единственная жалоба заключается в том, что Microsoft изменила вывод ошибок и поэтому автоматически перескакивает на строки в код с выхода компилятора в настоящее время сломан (мне нужно посмотреть, как это исправить).

Я предполагаю, что вы исходите из "родной" сборки Emacs, и в этом случае вы также можете найти полезным в Cygwin-Маунт - модуль для Emacs.