LINUX.ORG.RU

emacs, make и текущая директория


0

0

Тема Emacs'а уже сильно избита, но наткнулся на такую вот проблему.

Есть некесколько проектов, над которыми ведётся разработка. Проекты состоят из множества исходных файлов. Файлы лежат в разных поддиректориях. Редактирую всё в Emacs. В нём есть возможность собрать проект - "M-x compile" (которая, естественно, пробиндина на горячую клавишу). По умолчанию команда для сборки прописана "make". Всё вроде хорошо. Но, make запускается в директории редактируемого файла, а надо - в корневой директории проекта. Можно конечно прописать команду "make -C <путь к корню проекта>", но т.к. проектов несколько, каждый раз перепривязывать клавишу тоже неудобно. Поиск по гуглю дал мало полезного.

Внимание, вопрос!;) Как бы сделать так, чтобы Emacs откуда-нибудь подхватывал нужную рабочую директорию для make, в зависимости от того, какой проект открыт?

★★★★★

Единственное, что приходит в голову - завести файл типа ~/projects и в нём каждая строчка означает проект.
Потом сделать ~/bin/my-make, который будет проверять все строчки файла ~/projects на совпадение с первыми символами pwd, если оно есть, то пускать make из директории проекта, если нет, то из текущей.

anonymous
()

Прописать в каждом каталоге Makefile с целью build-all, вызывающей make -C ... и установить команду по умолчанию make build-all.

Miguel ★★★★★
()
Ответ на: комментарий от Miguel

Не очень хороший вариант, ибо проекты на Qt и Makefile'ы генерятся qmake'ом. Но всё равно спасибо.

Sectoid ★★★★★
() автор топика
Ответ на: комментарий от Sectoid

Очень просто делаешь в каждом корневом каталоге проекта файл root-project-dir

Потом пишешь функции:
(defun root-project-dir ()
  "Return path to root project directory"
  (loop for curdir = default-directory then (concat curdir "../") and
	max = 10 then (- max 1)
	while (> max 0)
	when (file-exists-p (concat curdir "root-project-dir"))
	return curdir))

(defun compile-in-root-dir ()
  "Compile in root project directory"
  (interactive)
  (compile (concat "cd " (root-project-dir) "  && make ")))

CrazyPit ★★★
()
Ответ на: комментарий от CrazyPit

Спасибо!... Кажется мне таки пора учить Lisp...

Sectoid ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.