LINUX.ORG.RU

emacs: найти Makefile


0

0

Продолжаем день вопросов про emacs :)

проект выглядит так build src subforder1 subfolder2

в build лежит Makefile, а также объектники, бинарники и т.д.

если я открою в emacs файл из src/subforder1 а потом наберу M-x compile make -C ../../build все начнет собираться,

но если после этого открою файл в src то придется поменять make -C ../../build на make -C ../build

и так каждый раз,

написал для этого скрипт на sh, он ищет самый верхний build переходит туда и делает make.

А никто не подскажет как тоже сделать на elisp?

anonymous

Лично я сделал так:

(defun user-make-target (target)
  " Compile as 'make target'. The function calls make on
Makefiles in the current directory if it is readable. If not, it
tries to call make all on Makefile in the parent directory in the
case if sources are in some subdirectories from the Makefile. It
returns 1 if call was from the current directory, 2 if from
parent directory and nil if no Makefile found"
  (interactive)
  (if (file-readable-p "Makefile")
      (progn
	(compile (concat "make -k " target))
	'make-target-curr)
    (if (file-readable-p "../Makefile")
	(progn
	  (compile (concat "make -k -C .. " target))
	  'make-target-parent)
      nil)))

;; general compile function call "make all"
(defun user-save-and-make-all ()
  " Save and call compile as 'make all'. The function calls make
on Makefiles in the current directory if it is readable. If not,
it tries to call make all on Makefile in the parent directory in
the case if sources are in some subdirectories from the
Makefile."
  (interactive)
  (save-buffer)
  (let ((status (user-make-target "all")))
    (if (null status)
	(message "Error: No Makefiles both in current and in the parent directories!")
      (if (eq status 'make-target-curr)
	  (message "Make all executed!")
	(message "Make all executed in the parent directory!")))))

Потом надо привязать клавишу к user-save-and-make-all

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