Компиляция программ C ++ с Emacs на Windows - PullRequest
8 голосов
/ 12 апреля 2009

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

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

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

Спасибо.

Ответы [ 5 ]

9 голосов
/ 12 апреля 2009

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

(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))))))
3 голосов
/ 12 апреля 2009

Команда M-x compile вызывает оболочку (например, linux bash, windows cmd.exe и т. Д.) Для запуска команды make. Я думаю, что в Windows emacs по умолчанию использует оболочку cmd.exe (через специальный исполняемый файл 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))

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

3 голосов
/ 12 апреля 2009

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

3 голосов
/ 12 апреля 2009

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

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

0 голосов
/ 22 февраля 2013

Если вы устанавливаете Emacs и g ++ в Cygwin, он должен работать точно так же, как Linux, то есть вы можете запустить M-x compile и использовать g++ myFile.cpp в качестве команды компиляции. Если вы используете «родной» Emacs для Windows или смешиваете Cygwin / MinGW / etc, все становится немного сложнее (и у других ответов есть решения), но все сводится к тому, чтобы убедиться, что переменные среды установлены правильно ( например, путь, оболочка и т. д.). В конечном итоге, если вы не можете запустить его из командной строки (cmd.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; чтобы получить к нему доступ, я добавляю каталог, содержащий его мой путь (в моем ~ / .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, и оттуда дела идут весело. Вы можете сделать все настолько сложно, насколько вам нужно (в моем текущем проекте у меня есть сценарии сборки и тестирования оболочки, которые вызывают scons и devenv.com; я склонен избегать пакетных файлов, так как оболочка гораздо более мощная). Моя единственная жалоба заключается в том, что Microsoft изменила вывод ошибок, и поэтому автоматический переход к строкам в коде из выходных данных компилятора в настоящее время не работает (мне нужно посмотреть, как это исправить).

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...