Ну, я думаю, на этот раз я понял это, но это ужасно. 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
, чтобы при компиляции main
было включено other/libaux.a
. Затем в верхней части буфера нажмите [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]
и заново создайте Makefiles.
Итак, теперь в вашем верхнем каталоге вы можете просто запустить make, и main
должен быть рабочим исполняемым файлом.
Я быстро становлюсь убежденным, что EDE еще не готов для использования людьми, отличными от его авторов. Несмотря на его размер и количество усилий, которые они явно вложили в него, он слишком глючит, слишком нелогичен и просто недостаточно умен. Это позор. Emacs нужно что-то вроде этого.