Emacs C IDE / Гну Глобальный руль-gtags

Привет сообщество Ubuntu,

таким образом, в первую очередь, я хотел бы сказать, что я довольно плохо знаком с человечностью (16.10) и Linux. Я решил использовать Windows как можно меньше и также хотел начать учить Язык программирования C. Однако я думал, что будет хорошо сделать так в Emacs, таким образом, я начал изучать Emacs и сделал некоторые Учебные руководства на emacs. Главным образом Основы и, чем обучение на практике. Таким образом, я нашел это Учебное руководство https://tuhdo.github.io/c-ide.html Прежде, который я установил много пакетов включая руль и gtags и руль-gtags. Я также установил ncurses libary для установки глобальной гну.

Таким образом, теперь мы добираемся до моей проблемы / вопрос. В первую очередь, если я честен, я не делаю действительно теперь, каков gtags, но я думал, что собираюсь понять это, когда я устанавливаю его (Что-то для навигации, я предполагаю). Но под разделом 'Source Code Navigation' он говорит о:

"Перед использованием ggtags или руля-gtags, не забудьте создавать базу данных GTAGS путем выполнения gtags в корне проекта в терминале":.. и затем некоторые команды

Я думаю, что так или иначе должен соединить libary с emacs. Я FAQ GNU_Global записан для создания ссылки на мою папку проекта, относящуюся к:/usr/src/lib

Но в моем/usr/src каталоге не папка lib. Теперь я предполагаю, потому что Ubuntu имеет немного отличающиеся структуры, чем другие дистрибутивы Linux, которые этот libary где-то в другом месте? Или я полностью неправильно? Я не мог найти ответы с Google поэтому, возможно, можно просветить меня.

Заранее спасибо, Andi

3
задан 21 October 2016 в 01:27

2 ответа

склонные sudo становятся глобальными

/ *********************** Ниже, несоответствующее Приветствие *****************/к Linux и C., и это - мое первое сообщение. LOL

Вы находитесь в правильном пути! поздравляю! Я - студент EE выполнение CS теперь.

я надеюсь, что мой совет поможет Вам.

  1. Избавляются от окон, даже не используйте его в виртуальной машине. если наклон, но второй ноутбук только для Linux и программирующий C/C++.

Windows для развлечения для непрограммиста, я мог бы быть небольшим экстремальным значением. ДА, C/C++ и Unix для полужирного для про!

  1. Мое предположение - Вы, не имеют, запускаются, изучают C++ все же. Если ture, Чувак, запускают C++ сначала, используйте или любая книга от обмена стека или quora.

, почему? C++ более тверд, и больше задания, и если Вы знакомый с C++. Я не уверен, я думаю, что C может быть погрузкой легко.

, почему C++ сначала, большой стиль программирования C не предлагается в C++. Некоторым запрещают, если Вы хотите записать хороший и современный C++.

ДА, научитесь C на горьком опыте. существует даже книга, названная этим.

ХА-ХА, но если Вы - студент EE и выполнение встроенной системы, изучают C! Изучите C! Изучите C! C является определенно страной чудес здесь.

Для становления богом в программировании C: (мой путь)

  1. K& R книга, библия!

  2. APUE, библия снова! существует онлайн-курс в APUE, люди серьезны.

  3. я думаю, что Вы хороши для движения, никакая потребность читать больше, НО!

, если у Вас есть достаточно времени и энергии, считайте исходный код UNIX. существует книга, названная "комментарий исходного кода Unix". Это была необходимая книга по информатике в MIT. но перед этим, Вам нужно некоторое знание об ОС.

Достаточно о C!

Позволяет разговору о IDE, так как Вы плохо знакомы с Linux.

Использование Emacs, Vi, или.. и для C и для C++, Python, о, мог бы быть другими языками программирования.

IDE делает Вас ленивыми, не думая о том, что действительно продолжается.

Думают об этом, C/C++ создаются задолго до некоторого необычного IDE, окон OS!

, как, люди запрограммировали ОС в те дни? использовать IDE? ха-ха

Учатся C/C++ на горьком опыте. Я гарантирую, что Вы будете наслаждаться им.

НАКОНЕЦ, не получают глобальную гну.

"Это полезно для взламывания крупные проекты, которые содержат много подкаталогов," говорит сеть.

Вы поддерживающий некоторые крупные проекты или просто делающий некоторый учебник, программируя упражнения?

Снова, это делает Вас ленивыми!

-2
ответ дан 1 December 2019 в 16:56

gtags является инструментом Linux, который генерирует базу данных символа для исходного кода и затем позволяет искать тех символов использование и определение. ggtags является "плагином" для Emacs, который предоставляет автоматизированный frontend инструменту. Некоторые альтернативы, которые имеют схожую функциональность к gtags, являются ctags, завершающими тегами и cscope, большинство которых имеет их собственные плагины Emacs.
В частности, многие из этих инструментов являются не очень хорошими при обработке больших кодовых баз (размер ядра Linux и более крупными) из-за способа, которым они хранят свои базы данных. Ядро Linux, например, генерирует текстовый файл на 2 ГБ при использовании просто gtags, и тот файл должен загружаться и искаться каждый раз, когда Вы пытаетесь сделать поиск символа. Обходные решения существуют для разрешения этой проблемы (ниже).

Простое решение

1. Установите gtags в своей системе.

sudo apt-get install global

На командной строке необходимо теперь смочь выполнить эту команду и видеть, где она установлена:

which gtags

2. Скажите Emac ggtags плагин, где найти gtags инструмент.

Используя путь, возвращенный which gtags управляйте, добавьте следующую строку к своему ~/.emacs файл:

(setq ggtags-executable-directory "/path/to/gtags/parent/dir")

3. Создайте gtags базу данных для проекта кода.

По умолчанию ggtags будет искать вверх через дерево каталогов из файла, в котором Вы выполнили поиск символа, пытающийся найти файл GTAGS. Это файл GTAGS (и возможно некоторые связанные) является Вашей базой данных символа. Если это не найдет достойным символа в первом файле базы данных, то это продолжит искать дерево каталогов дополнительные базы данных. Соответствия расположены по приоритетам на основе близости файла использования/определения символа в файл, Вы выполняете в поиске. Поколение этой базы данных называют, "отмечая", и это обычно располагается в корне исходного дерева, которое Вы хотите отметить. Сам gtags инструмент не делает этого поиска продолжения, так как он передал путь к определенной базе данных, и собственный компонент Emacs, предоставленный gtags плагину, поддерживает это поведение единой базы данных.

Для создания gtags базы данных для исходной папки из Emacs при использовании ggtags плагина (рекомендуемый по собственному компоненту Emacs gtags плагин) необходимо выполнить команду ggtags-create-tags. Привязка клавиш по умолчанию для выполнения произвольных команд в Emacs является M-x, так нажатие это, и затем введите ggtags-create-tags. Это предложит Вам папку, все должно быть отмечено, и база данных должна быть помещена, так укажите на него на главный каталог исходной папки, которую Вы хотите отметить. Это будет работать некоторое время, возможно долгое время, если у Вас будет большое исходное дерево, блокируя весь GUI Emacs, в то время как это генерирует базу данных тега. После того как это завершается, это привыкнет автоматически ggtags, когда релевантный.

Намного лучшее решение

Одной из проблем с gtags, ctags, завершающими тегами и cscope является размер произведенных баз данных. Так как они отмечают, где символы определяются, а также где они используются, можно закончить с базой данных, больше, чем фактическое исходное дерево. Очень большие базы данных затем представляют проблему поиска их в разумный срок. Используя ggtags с Ubuntu по умолчанию глобальный гну установленный инструмент производит очень неэффективный формат базы данных, который становится экспоненциально хуже большее, которое это выращивает. Главным образом это вызвано тем, что Ubuntu все еще обеспечивает глобальный гну инструмент с 2008, а не современную версию, и это не создается для использования намного более эффективных ctags инструментов в качестве базовой платформы.

Чтобы избежать проблем с gtags и заставить его использовать более эффективный ctags, Вам нужны глобальные 6.4 или позже, и он должен быть создан для указания на ctags установки. Единственным путем я действительно нашел, чтобы сделать, это должно создать его из источника и предоставить надлежащие возможности, а также все необходимые зависимые установки пакета. Я закончил тем, что писал сценарий оболочки, чтобы сделать эту установку и установку для меня, и я сохраняю его в GitHub с остальной частью моей emacs конфигурации и сценариев установки. Можно получить его от https://github.com/mtalexan/emacs-settings/blob/master/global_install.sh.

Необходимо будет установить несколько вещей в ~/.emacs для использования в полной мере это:

(setq ggtags-use-idutils t)
(setq ggtags-use-project-gtagsconf nil)

Это включает использование очень эффективного idutils подпакета и удостоверяется, что вызовы gtags используют Ваши глобальные настройки для gtags, в котором Вы теперь скомпилировали.

Как использовать gtags/ggtags/helm-gtags

Я лично использую ggtags и не руль-gtags или gtags. Emacs обеспечивает значение по умолчанию gtags "плагин", но он имеет намного худший интерфейс, чем ggtags и будет только искать единую базу данных. Я регулярно использую руль для большинства вещей, но мне нравится мой интерфейс ggtags, разделенный от моего интерфейса руля, когда я анализирую соответствия, таким образом, я не использую руль-gtags. Также руль-gtags является довольно медленным, если Ваша gtags база данных является большой.

Для ggtags необходимо установить ggtags-режим для него, чтобы быть полезными. Это может быть сделано путем добавления его для автоматического включения c-режима путем добавления чего-то как следующее в .emacs файл

(add-hook 'c-mode-common-hook
  (lambda ()
    (when (derived-mode-p 'c-mode 'c++-mode 'java-mode)
     (ggtags-mode 1))))

Кроме того, можно установить его, чтобы всегда быть включенными, вместо этого используя строку как это:

(setq ggtags-global-mode 1)



Настройки, которые я рекомендую, если Вы собираетесь быть использованием большой кодовой базы, требуют следующих строк в Вашем ~/.emacs файл:

; Allow very large database files
(setq ggtags-oversize-limit 104857600)
(setq ggtags-sort-by-nearness t)



При просмотре кода наиболее распространенные вещи, которые я делаю, состоят в том, чтобы следовать за символом под моим курсором, найти все использование символа под моим курсором и иногда делать поиск символа, не связанный туда, где мой курсор. Они соответствуют командам: ggtags-find-tag-dwim и ggtags-find-reference. Эти команды воздействуют на точку (Ваша позиция курсора Emacs), но откроют подсказку для Вас для ввода символа, когда нет никакого символа под точкой или когда их называют от M-x.
Когда Вы работаете ggtags-find-tag-dwim это может сделать много вещей, лучше всего понятых путем проигрывания с ним, но обычно будет переходить к соответствию, когда существует только одно соответствие (эквивалентный, который не автопереходит, ggtags-find-tag) или откроет боковые окна как ggtags-find-reference со списком возможных соответствий, который включает файл, номер строки и некоторый контекст для него, где каждая запись активируема по щелчку для перехода непосредственно там.
Будьте осторожны, когда то окно открыто, оно помещает Вас в специальный незначительный режим, который означает вверх и вниз по ключам, переключится между соответствиями, пока Вы не нажимаете Enter для официального выбора соответствия.
Удобно при выборе соответствия метка тега оставлена позади. Это означает, что можно использовать команду pop-tag-mark для перехода назад к последнему месту, Вы были в. метка тега является стопкой меток тега, таким образом, Вы можете неоднократно искать символы и будете всегда мочь вернуться к каждому местоположению до следующего поиск. Если Вы хотите просто сделать ручной поиск, а не один на основе символа в точке, существуют некоторые функции ggtags, которые работают как ggtags-find-tag-dwim, но предложите Вам символ в мини-буфере. ggtags-find-tag-dwim сделает это также, если не будет никакого символа под точкой.

4
ответ дан 1 December 2019 в 16:56

Другие вопросы по тегам:

Похожие вопросы: