Как создать проект EDE для C++

Я пытался настроить проект EDE для C++ (emacs24 + встроенный CEDET), и я начинаю впадать в отчаяние, потому что я не могу найти способ, которым я хочу, чтобы генерировались make-файлы. Я относительно новичок в Emacs. Я постараюсь описать, что я делаю:

У меня есть игрушечный проект, настроенный так:

main.cpp
other/
  Utils.cpp 
  Utils.h
  CGrabBuffer.cpp
  CGrabBuffer.h

main.cpp включает оба.h внутри каталога "other/". Вот шаги, которые я следую, чтобы настроить проект EDE с этой простой установкой каталога:

  • Откройте main.cpp в emacs и выполните M-x ede-new; тип: Make; название: main-proj,
  • Откройте один из файлов в "другом" каталоге и выполните M-x ede-new; тип: Make; название: aux-proj,
  • Теперь пришло время создать цели (которых я считаю тремя в данном случае):
    • В буфере main.cpp: M-x ede-new-target; название: main; тип: program, При появлении запроса я добавляю main.cpp к этой цели.
    • Я повторяю то же самое для двух других целей (Utils, который имеет Utils.cpp и Utils.h и CGrabBuffer, который имеет CGrabBuffer.cpp и CGrabBuffer.h). Здесь я нахожу первую проблему. Какого типа должны быть эти две цели? Я только хочу, чтобы они генерировали файлы.o.
  • Как только это будет сделано, я печатаю M-x ede-customize-current-target ко всем трем целям, и я добавляю некоторые пути включения, некоторые библиотеки и т. д.
  • После этого, если я позвоню M-x ede-compile-project он не компилируется, потому что:
    • Сначала он пытается скомпилировать main.cpp; Я понятия не имею, как указать (используя EDE), что и Utils.o, и CGrabBuffer.o необходимы перед попыткой сборки main.cpp.
    • Если я вручную изменю порядок (редактирую Makefile), он не сможет связать main.cpp, потому что не может найти Utils.o и CGrabBuffer.o.

Как вы видите, я нахожусь в середине большого беспорядка. Может быть, я даже не понимаю, что означает "цель" в EDE. Я также читал о существовании ede-cpp-root-project, которое должно быть указано в файле.emacs. Я не пробовал это, потому что я думаю, что это просто помогает с семантикой. Это не генерирует Makefiles, не так ли? Могу ли я иметь (или мне нужен) проект EDE, созданный с использованием Project.el, и то же самое, используя ede-cpp-root-project для семантики? Или это избыточно?

Извините, если я неправильно понял много вещей, но я очень запутался, и то, что я новичок в emacs, ухудшает ситуацию. Спасибо тебе за твое терпение!

РЕДАКТИРОВАТЬ: с некоторой переделкой и ответами, которые я получил, я смог выяснить много вещей, так что большое спасибо. Чего я до сих пор не понимаю, так это использования ede-cpp-root-project, который должен быть указан внутри файла.emacs. Это только для семантики с ++? Является ли избыточным иметь проект с Project.el's, а также строки elisp в.emacs?

2 ответа

Решение

EDE предназначен для работы с различными проектами, обычно такого типа, когда система сборки была написана вне Emacs в каком-либо другом инструменте.

Тип проекта EDE, который создает файлы Makefile для вас, может сделать довольно много вещей, но вам нужно иметь некоторое базовое понимание систем сборки, чтобы он был полезным, и вам действительно нужно настроить проекты, чтобы заставить работать что-либо любого сложности.

Недавно я добавил раздел в руководство по EDE, чтобы помочь с основными настройками проекта, которые автоматически генерируют файлы Automake. Вы можете проверить учебник здесь:

http://www.randomsample.de/cedetdocs/ede/ede/Quick-Start.html

Те же шаги будут применяться к проектам, которые используют вместо этого только Make, но проекты на основе Make часто имеют проблемы с общими библиотеками из-за дополнительной сложности.

Ответ Майка довольно хороший, но я думаю, что можно просто добавить.h файлы к той же цели, что и ваш .cpp источники. Он будет отслеживать их отдельно.

Другой полезный трюк заключается в использовании всей клавиши компиляции проекта (Cc . C), которая использует заглавную букву C всякий раз, когда вы меняете что-то большое. Это восстановит Makefiles, перезапустит все необходимые функции Automake и начнёт сверху.

РЕДАКТИРОВАТЬ: Вам нужен только один проект EDE для данной области проекта. Проект ede-cpp-root полезен, когда другой автоматический тип проекта не работает. That's when you create that in your.emacs file so that the other tools that need a project definition, like semantic's smart completion, and tag lookup, will work.

Ну, я думаю, что на самом деле я понял это на этот раз, но это ужасно. Utils.cpp а также CGrabBuffer.cpp не должны получать свои собственные индивидуальные цели, потому что, кажется, нет подходящего типа цели. Вместо этого вам нужно будет создать архив или библиотеку, которая будет автоматически компилироваться Utils.cpp а также CGrabBuffer.cpp для тебя. Ниже я предполагаю, что вы хотите статический, но это легко изменить.

[Для тех, кому архивы или библиотеки не знакомы, они просто собираются .o файлы в отдельный блок. Это на самом деле не делает сборку сложнее. Подробнее читайте здесь.]

1) Выполните первые два с половиной шага выше (включая main цель, но не другие цели).

2) Переключитесь на Utils.cpp и сделайте M-x ede-new-target; название: aux; тип: archive, При появлении запроса добавьте Utils.cpp к этой цели.

3) Переключитесь на CGrabBuffer.cpp и сделайте C-c . a; Цель: aux,

4) Восстановить Makefile с помощью M-x ede-proj-regenerate, На данный момент, если вы запустите make в other подкаталог, вы должны получить архив libaux.a,

5) Вернитесь в main.cpp и выполните M-x ede-customize-current-target, Это вызывает интерактивный буфер настройки emacs, который позволяет вам редактировать детали конфигурации ede. Под Ldflags раздел, нажмите [INS], Это выскакивает новая строка, которая говорит Link Flag: и имеет несколько разноцветных коробок для ввода (у меня серый). Тип -Lother -laux, чтобы other/libaux.a включен при компиляции main, Затем в верхней части буфера нажмите [Accept], который должен сохранить это изменение и переключиться обратно на main.cpp.

6) Восстановить Makefile с помощью M-x ede-proj-regenerate,

Теперь, к сожалению, Makefile делает main цель, а затем спускается в other каталог и делает это. К сожалению, это означает, что make из каталога верхнего уровня не будет работать на чистом дереве. Я не знаю, почему это так, потому что кажется, что это никогда не будет тем, чего вы хотите в любом проекте, который когда-либо создавался с EDE. Я не могу найти способ изменить это, кроме этого хака:

7) сделать M-x customize-project; под Inference-Rules щелчок [INS], Затем введите цель: all; зависимости: aux main; Правила: [INS]; строка @:, (Это последнее только для предотвращения ошибки в пустом правиле с вкладкой; предположительно ошибка EDE.) Нажмите [Accept]и восстановить файлы Makefile.

Так что теперь, в вашем верхнем каталоге, вы можете просто запустить make, и main должен быть рабочим исполняемым файлом.

Я быстро становлюсь убежденным, что EDE еще не готов для использования людьми, не являющимися его авторами. Несмотря на его размер и количество усилий, которые они явно вложили в него, он слишком глючит, слишком нелогичен и просто недостаточно умен. Это позор. Emacs нужно что-то вроде этого.

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