Компиляция C с Emacs в системе Windows - PullRequest
4 голосов
/ 29 декабря 2010

У меня есть немного опыта программирования на C из школы, но это был весь Unix.Я хочу скомпилировать C с Emacs, используя Emacs в качестве второй IDE.

Какой самый простой способ сделать это?Я скачал Cygwin без успешной компиляции helloWorld.c в Emacs.Даже открывая командную строку cygwin (shell или как там ее вызывали), он не распознает gcc как команду.

Ошибка 'make' не распознается как внутренняя или внешняя команда, работающая программа или командный файл.

Мне нужен компилятор, который работает в Windows, бесплатен (или поставляется с Visual Studio) и может использоваться с Emacs,О том, что печатать в Emacs после команды M-x compile, было бы неплохо знать.Я посмотрел на MinGW, но его загрузка - рутина.

Надеюсь, вопрос имеет смысл.Я часто теряюсь в мире открытого исходного кода.

Окружающая среда Windows XP, Visual Studio 2010, Emacs 23.2.1, Windows 7.1 SDK установлен, Cygwin

Ответы [ 4 ]

4 голосов
/ 29 декабря 2010

Я использую Visual Studio в качестве компилятора, а emacs - в качестве редактора.

Просто установите Visual Studio C ++ 2010 Express Edition. Затем я пишу make-файл nmake и вызываю nmake из командная строка Visual Studio (доступна из меню «Программы»). Это отлично работает для небольших проектов.

См. http://msdn.microsoft.com/en-us/library/f35ctcxw.aspx для более подробной информации.

Для более крупных проектов вы можете создать решение в Visual Studio и просто используйте Emacs в качестве редактора. Вы также можете вызвать msbuild из Командная строка для построения решения.

Кроме того, командная строка visual studio просто вызывает vcvars.bat (или что-то в этом роде) создать необходимую среду. Я полагаю, вы можете изменить оболочку emacs, указав экземпляр cmd, который запускал этот bat-файл при запуске?

3 голосов
/ 04 января 2011

Вам не нужны gcc или cygwin для компиляции кода на C в Windows.

Я использую компилятор, утилиту make, компоновщик и другие инструменты, которые поставляются с (бесплатной) версией Microsoft Visual-C ++ Express и (бесплатным) Windows SDK, в составе emacs 23.2.

Несколько советов для вас:

  • используйте это в вашем файле .emacs:
    (eval-after-load "compile"
       '(progn
          (setq compilation-scroll-output "first-error")
          (setq-default compile-command "nmake ")))


  • Добавьте соответствующее сообщение об ошибкеregexii к списку регулярных выражений ошибок компиляции.Как это:
    (mapcar

     (lambda (x)
       (add-to-list 'compilation-error-regexp-alist-alist x))

     (list
     ;; Microsoft C/C++:
     ;;  keyboard.c(537) : warning C4005: 'min' : macro redefinition
     ;;  d:\tmp\test.c(23) : error C2143: syntax error : missing ';' before 'if'
     ;;  .\cppcli1.cpp(36): error C2059: syntax error : 'public'
     ;;  e:\projects\myce40\tok.h(85) : error C2236: unexpected 'class' '$S1'
     ;;  myc.cpp(14) : error C3149: 'class System::String' : illegal use of managed type 'String'; did you forget a '*'?
     ;;   ("\\(\\([a-zA-Z]:\\)?[^:(\t\n]+\\)(\\([0-9]+\\)) ?\: \\(error\\|warning\\) C[0-9]+:" 1 3)
      '(msvc "^[ \t]*\\([A-Za-z0-9\\.][^(]*\\.\\(cpp\\|c\\|h\\)\\)(\\([0-9]+\\)) *: +\\(error\\|fatal error\\|warning\\) C[0-9]+:" 1 3)

    ))

    (setq compilation-error-regexp-alist
      (mapcar 'car compilation-error-regexp-alist-alist))

3 голосов
/ 29 декабря 2010

Все, что вы пытаетесь сделать в Windows, будет "рутиной", потому что вы пытаетесь собрать компоненты из разных источников. Если вы хотите легко, используйте IDE и компилятор, упакованные вместе, такие как бесплатная версия Visual Studio, или Code Blocks, или Dev C ++ и т. Д.

Насколько я понимаю, приглашение M-x compile ищет команду оболочки по пути оболочки, которую запускает emacs, которую вы, конечно, можете установить где-нибудь. В зависимости от того, какую сборку emacs вы используете для Windows, это может быть по умолчанию оболочкой Windows, или это может быть bash под MINGW или cygwin.

Чтобы получить gcc, make и тому подобное в cygwin, вы должны выбрать их из пакетов cygwin для установки (эффективное использование программы установки cygwin само по себе неясно). Gcc Cygwin по умолчанию будет компилировать вещи, зависящие от DLL Cygwin, но вы также можете сделать исполняемые файлы Windows в стиле mingw с флагом -mno-cygwin для gcc или запустив mccw gcc вместо cygwin.

Предположительно, emacs может даже запустить компилятор Visual Studio, если вы найдете для этого подходящую командную строку или утилиту make или вы можете запустить ее из gnu make. Проблемы, с которыми вы можете столкнуться при смешивании и сопоставлении, - это пути windows и unix, наличие в вашем исполняемом пути необходимых инструментов и вероятность того, что сторонний компилятор может отформатировать ошибки так, что среда IDE не будет анализировать их, чтобы сделать их кликабельными. , Все эти вещи можно обойти (например, на одном этапе проекта у меня был скрипт sed, который переформатировал ошибки GCC-cross, чтобы сделать их кликабельными в окне ошибок компилятора Visual Studio)

2 голосов
/ 18 июля 2014

Я новичок в Emacs, Cygwin Bash и общей терминологии C, поэтому я нашел, что некоторые другие объяснения в этой теме и другие немного запутывают меня, чтобы следовать. В конце концов я нашел решение самостоятельно. Для тех, кто находится в подобной ситуации, я надеюсь, что эти простые инструкции помогут. Если у кого-то более продвинутого, чем у меня есть дополнения, я могу обновить этот пост.

  1. Установите Cygwin.
  2. На экране настройки перейдите в папку «devel». Выберите «gcc-core», если он еще не был загружен в вашу настройку Cygwin. Завершите установку.
  3. Установить Emacs.
  4. Найдите файл .emacs (файл конфигурации Emacs, расположенный у меня в главной папке Emacs) и добавьте следующее:

(setq explicit-shell-file-name "{Path to Cygwin folder}\\Cygwin.bat") (setq shell-file-name "bash") (setenv "SHELL" shell-file-name)

Установите свой собственный путь к Cygwin.bat, где указано. Обратите внимание, что вы должны использовать Cygwin.bat. Это не работает, если вы идете прямо к bash.exe. Кроме того, вам может понадобиться использовать двойную обратную косую черту, чтобы заставить работать escape-символы, или Emacs может жаловаться при запуске.

Теперь вы можете проверить, работает ли он, зайдя в Emacs и набрав M-x shell. Он должен вызвать оболочку Cygwin bash в новом буфере.

В качестве примера скомпилируйте и запустите программу "foo.c" через Cygwin Bash:

  1. Компиляция: gcc foo.c -o foo.exe. Это создает файл и делает исполняемый файл с тем же именем.
  2. Выполнить: ./foo.exe. Вывод должен быть показан в буфере оболочки Emacs.

Это сработало очень хорошо для меня, и я надеюсь, что это будет простой альтернативой для тех, кто не хочет проходить настройку Visual Studio или других решений.

...