(setq last-target "all")
(defun call-make (&optional target) "Call `make' with specified target"
(if (eq target nil)
(progn
(setq last-target (read-from-minibuffer "Build target: " last-target))
(compile (concat "make -k " last-target))
)
(progn (compile "make -k all tags")
(visit-tags-table "./TAGS"))))
;; Automatic build package in working directory
;; invoke "make" if Makefile is found
;; or do "configure" first if script found
(defun build() "Call configure; make in current directory."
(interactive)
(progn
(if (get-buffer "*compilation*")
(kill-buffer "*compilation*"))
(setq output-buf (get-buffer-create "*compilation*"))
(princ (type-of output-buf))
(if (file-exists-p (expand-file-name "Makefile"))
(call-make)
(if (file-exists-p (expand-file-name "./configure"))
(set-process-sentinel
(start-process "configure" output-buf (expand-file-name "./configure"))
(lambda (proc event)
(if (string= event "finished/n")
(progn (call-make "all tags")
(visit-tags-table "./TAGS"))
)))
(call-make) ; intended for calling default targets
))))
启动时自动检测当前目录是否有 Makefile 或 configure。如果存在其中之一则尝试构建软件包。使用异步进程 start-process 命令
其中 set-process-sentinel 为第一个进程(configure)设置一个事件句柄,当这个进程结束的时候(事件为 "finished/n"),自动调用 lambda 表达式指定的响应过程,既开始执行 make。
第一次写 elisp 脚本,似乎也不是那么难:)
(defun call-make (&optional target) "Call `make' with specified target"
(if (eq target nil)
(progn
(setq last-target (read-from-minibuffer "Build target: " last-target))
(compile (concat "make -k " last-target))
)
(progn (compile "make -k all tags")
(visit-tags-table "./TAGS"))))
;; Automatic build package in working directory
;; invoke "make" if Makefile is found
;; or do "configure" first if script found
(defun build() "Call configure; make in current directory."
(interactive)
(progn
(if (get-buffer "*compilation*")
(kill-buffer "*compilation*"))
(setq output-buf (get-buffer-create "*compilation*"))
(princ (type-of output-buf))
(if (file-exists-p (expand-file-name "Makefile"))
(call-make)
(if (file-exists-p (expand-file-name "./configure"))
(set-process-sentinel
(start-process "configure" output-buf (expand-file-name "./configure"))
(lambda (proc event)
(if (string= event "finished/n")
(progn (call-make "all tags")
(visit-tags-table "./TAGS"))
)))
(call-make) ; intended for calling default targets
))))
启动时自动检测当前目录是否有 Makefile 或 configure。如果存在其中之一则尝试构建软件包。使用异步进程 start-process 命令
其中 set-process-sentinel 为第一个进程(configure)设置一个事件句柄,当这个进程结束的时候(事件为 "finished/n"),自动调用 lambda 表达式指定的响应过程,既开始执行 make。
第一次写 elisp 脚本,似乎也不是那么难:)