Emacs как среда разработки приложений на C++

Морев Н. В. <kolyuchiy@gmail.com>


Содержание

Введение

Emacs -- это расширяемый, настраиваемый, само-документированный текстовый редактор1. Его первая версия была создана Ричардом Столлманом2 в 1976 году.

Большая часть Emacs'а написана на специальном диалекте Lisp'а, называемом Emacs Lisp. Это интерпретируемый язык, позволяющий с лёгкостью расширять возможности редактора без перекомпиляции или перезагрузки редактора. Это способствовало появлению огромного количества различных дополнений для Emacs. Так, например, современные версии Emacs включают в стандартной поставке встроенный веб-браузер, программу для чтения почты и групп Usenet, тетрис и виртуального психотерапевта.

Одна из эмблем Emacs -- кухонная мойка, потому что говорят, что в Emacs'е реализовано все, кроме кухонной мойки. Многие фанаты Emacs используют его как свою основную операционную систему -- все программы, с которыми они работают запускаются только из-под Emacs. Есть и такие, которые считают себя адептами Церкви Emacs3, во главе которой стоит святой ИГНУсий -- Ричард Столлман4. Короче говоря, Emacs -- это культовый и легендарный текстовый редактор.

Emacs -- работает не только под GNU/Linux. Он был портирован на множество других операционных систем, включая и MS Windows.

Как и многие другие удачные opensource-проекты, Emacs разделился на несколько независимых друг от друга ветвей, разработка которых ведётся отдельно. Сегодня наиболее популярными версиями Emacs являются GNU Emacs5 и XEmacs6. Они различаются во множестве мелких деталей, но по большому счету очень похожи, поэтому все, что будет сказано об одной версии скорее всего будет работать и на другой. Обе версии поддерживают работу как в текстовой консоли так и в графическом режиме. При написании этого текста использовался XEmacs версии 21.

Основы работы с Emacs

При запуске Emacs показывает в своём окне минимальную информацию необходимую для начала работы с редактором. Это основные сочетания клавиш для вызова различных функций. («C-» означает клавишу Control, «M-» -- клавишу Meta, которую на PC заменяет Alt)

Встроенная помощь
C-h F Список часто задаваемых вопросов о Emacs и ответов на них
C-h t Небольшой текст, рекомендуемый для прочтения, чтобы научиться эффективно работать с редактором
f1 Помощь
C-h i Читать встроенную документацию
Полезные сочетания клавиш
C-x C-f открыть или создать файл
C-x C-s сохранить изменения в текущем файле
C-x u откат изменений
C-x C-c выход из редактора

Написание-запуск-отладка программ

Покажем возможности Emacs как IDE на примере разработки одной небольшой программы на C++.

В Emacs существуют специальные режимы (major modes) практически для любого языка программирования, реализующие функции подсветки синтаксиса, автодополнения, автоматических отступов, подсветки скобок и кавычек, вызова соответствующих программ компиляции и запуска и т.д.

Работа с файлами

Для манипулирования файлами и каталогами в Emacs существует режим редактирования директорий (Dired mode). Он запускается по нажатию C-x d или M-x dired. Создадим новый каталог для хранения проекта. Для этого, находясь в домашнем каталоге, нажмём + и введём имя нового каталога. Затем перейдём в этот каталог и создадим новый файл проекта7 с помощью сочетания клавиш C-x C-f, о котором мы уже упоминали выше. Откроется новый буфер для этого файла. В этом буфере автоматически загрузится режим для редактирования исходников C++ (c++-mode).

Ввод и компиляция

Сначала введём комментарии к программе. Для этого нажмите M-;. Далее введём саму программу (см. рис. 1).

Рисунок: Введённая программа
Image ./a.png

Теперь сохраним нашу программу (C-x C-s) и скомпилируем (M-x compile). Будет запрошена команда для компиляции. По умолчанию -- это make -k. Но так как мы ещё не написали Makefile, указывающий команде make, как нужно компилировать программу, мы вводим make -k hello, и make сам вызовет компилятор g++ с нужными ключами. Такой способ работает только для небольших программ, состоящих из одного модуля. В более сложных случаях мы должны написать соответствующий Makefile.

Если мы собираемся отлаживать нашу программу в отладчике gdb, то при компиляции нужно задать опцию -g, чтобы в получившийся исполняемый файл была включена отладочная информация. В этом случае команда для компиляции будет g++ -g -o hello hello.cc.

Теперь, чтобы запустить программу, мы загружаем встроенный в Emacs shell (M-x shell). Затем в нем запускаем наш исполняемый модуль (см. рис. 2).

Рисунок: Запуск программы
Image ./b.png

Отладка

В Emacs'е кроме всего прочего есть ещё и фронтенд для отладчика gdb. Чтобы войти в соответствующий режим введите M-x gdb, затем имя исполняемого модуля, предназначенного для отладки.

Появится командная строка gdb. Там введём две команды break main и run. Первая устанавливает брейкпоинт на функцию main(), а вторая запускает программу. Команда N в командной строке отладчика исполняет следующую строку программы. Чтобы получить справку по всем командам gdb введите в командной строке help. Более полную информацию об отладчике можно получить по команде C-h i m gdb.

Ошибки при компиляции

Предположим, что мы забыли написать точку с запятой после endl. В этом случае компилятор выдаст соответствующую ошибку. Чтобы автоматически перейти к строке, содержащей ошибку, нажмите C-x `.

Режим компиляции в Emacs умеет отлавливать не только ошибки, которые выдаёт g++, он понимает и множество других компиляторов, включая MS Visual C++.

Автоматическая расстановка отступов

Как вы, наверное, уже успели заметить, при вводе программы Emacs может автоматически (или по нажатию кнопки Tab) вставлять нужное количество пробелов в начале строки. Есть также возможность автоматически расставить отступы в уже готовой программе. Для этого выделите весь текст в текущем буфере (C-x H) и нажмите M-x indent-region.

Дополнительные возможности

Кроме того, о чем уже говорилось выше, в Emacs есть ещё некоторые возможности, делающие процесс написания программ удобным. Перечислим их кратко.

фолдинг (folding)
позволяет временно «свернуть» определённые части программы, не удаляя их физически из файла, для того, чтобы вместить на экран больше информации, полезной на данном этапе редактирования.

контроль версий
в Emacs интегрирована поддержка самых популярных систем контроля версий: CVS, RCS, SCCS и Subversion. Это позволяет, не выходя из редактора, работать с репозиториями, которые могут физически находиться на удалённом сервере или на локальной машине.

тэги (tags)
-- это база данных, которая хранит все имена функций и типов, определённых в исходниках программы, вместе с их местоположением. Она облегчает поиск нужных определений в большой программе.

speedbar
показывает в виде дерева содержимое файловой системы и содержимое текущего буфера. Например, для исходников на C это могут быть функции, определённые в данном файле.

сравнение файлов
позволяет выделить различающиеся строки и их части в двух (или трёх) файлах и легко переносить изменения из одного файла в другой.

Заключение

Emacs -- это настоящая интегрированная среда разработки (IDE). Для расширения своей функциональности Emacs активно использует внешние утилиты, стандартные для большинства Unix-систем. В этом смысле, он гораздо лучше интегрирован в Linux, чем многие другие существующие коммерческие IDE. В Emacs можно найти практически все, что может понадобиться для редактирования текстов, и даже больше того. Но если все-таки, что-то там отсутствует, то программист всегда имеет возможность написать это самостоятельно.

Невозможно изучить весь Emacs, но чем больше вы о нем знаете, тем эффективнее сможете работать. В Emacs есть несколько способов получения дополнительных сведений. Во-первых, встроенная в редактор справка, которая вызывается нажатием C-h. Во-вторых, режим для просмотра документации в формате Info (C-h i). В-третьих, режим для просмотра документации в формате man (M-x manual-entry).

Введение в Makefile

make8 -- это утилита, которая контролирует процесс получения исполняемых файлов или других неисходных файлов программы из исходных файлов. make получает знания о том, как компилировать программу, из специального файла, называемого Makefile, в котором перечисляются все неисходные файлы и как их получить из исходных файлов. Чтобы использовать make для сборки программы из исходных кодов, необходимо написать Makefile.

Возможности make

«Правила» и «цели» make

Правило в Makefile'е задаёт последовательность действий, необходимых для получения целевого файла из исходных файлов. Оно также задаёт список зависимостей целевого файла. Этот список должен включать в себя все файлы, которые используются при сборке цели.

Вот как может выглядеть простое правило:

target:	  dependencies ...
          commands
          ...

При запуске make можно указать целевое правило. Если оно не будет указано, то make собирает первую цель, указанную в Makefile'е.

Дополнительную информацию о make и Makefile'ах можно найти в документации make (C-h i m make).

Пример Makefile'а

Предположим, что нам необходимо собрать проект из нескольких исходных модулей на C++: main.cc, circle.cc и rectangle.cc. У двух из них есть файлы заголовков: circle.h и rectangle.h. Модуль main.cc использует два других и содержит функцию main(). Тогда самый простой Makefile может выглядеть примерно так:

main: circle.o rectangle.o

Здесь мы не указываем какую команду необходимо выполнить для компиляции, т.к. make имеет некоторые значения по-умолчанию, которые он применяет исходя из расширений исходных файлов.

При вызове программы make этот скрипт вызовет следующую последовательность действий:

g++    -c -o circle.o circle.cc
g++    -c -o rectangle.o rectangle.cc
g++     main.cc circle.o rectangle.o   -o main

Если нам понадобится добавить в аргументы компилятора ключик -g, то мы просто напишем вначале Makefile'а

CXXFLAGS = -g

Настройка Emacs

Настройки Emacs хранятся в файле .emacs в домашней директории пользователя. Этот файл представляет собой программу на Emacs Lisp'е.

Чтобы появилась возможность вводить текст на русском языке, необходимо добавить туда следующие строки (переключение на русский язык с помощью сочетания клавиш C-\):

(set-language-environment "Cyrillic-KOI8")
(set-default-buffer-file-coding-system 'koi8-r)
(set-default-file-coding-system 'koi8-r)
(set 'default-input-method "cyrillic-jcuken")
(put-charset-property 'cyrillic-iso8859-5
                      'preferred-coding-system 'koi8-r)

Дополнительная информация о файлах .emacs на http://www.dotemacs.de/basics.html.

Список литературы

1
Charles Curley. Emacs: the Free Software IDE // Linux Journal. (http://www.linuxjournal.com/article.php?sid=5765, 1.06.2002)

2
EmacsWiki (http://www.emacswiki.org)

О документе...

Emacs как среда разработки приложений на C++

This document was generated using the LaTeX2HTML translator Version 2K.1beta (1.48)

Copyright © 1993, 1994, 1995, 1996, Nikos Drakos, Computer Based Learning Unit, University of Leeds.
Copyright © 1997, 1998, 1999, Ross Moore, Mathematics Department, Macquarie University, Sydney.

The command line arguments were:
latex2html -nonavigation -split 0 -local_icons -address kolyuchiy@gmail.com -no_auto_link emacs-cxx.tex

The translation was initiated by Kolia Morev on 2004-04-10


Сноски

... редактор1
GNU Emacs Manual (http://www.gnu.org/software/emacs/manual/).
... Столлманом2
Основатель движения GNU за свободное программное обеспечение.
... Emacs3
http://www.dina.dk/~abraham/religion/
... Столлман4
http://www.stallman.org/saintignucius.jpg
... GNU Emacs5
http://www.gnu.org/software/emacs/emacs.html
... XEmacs6
http://www.xemacs.org/
... проекта7
Для исходников на C++ принято использовать одно из расширений .C, .cc, .cxx, .cpp или .c++.
...make8
http://www.gnu.org/software/make/make.html


kolyuchiy@gmail.com

Обновлено Tue Apr 15 21:27:20 2014 +0400