Вызов make-файла в корневом каталоге проекта от подкаталога от Emacs

Я могу предложить Плагин jQuery Media ? Обеспечивает встроенный код для всех видов видео, не только WMV и делает определение браузера, не допуская весь этот грязный переключатель/операторы выбора в Ваши шаблоны.

5
задан Flow 25 January 2014 в 17:08
поделиться

9 ответов

PDFCreator - это бесплатный инструмент для создания файлов PDF практически из любого приложения Windows.

Я также часто использую заголовок файла (в строке 1), такой как

// -*- compile-command: "g++ -o myprog myprog.ccc -lfoo -lbar && ./myprog"; -*-

, который вы можете обобщать по своему желанию с различными параметрами. После перезагрузки файла Mx compile выполнит вашу собственную команду компиляции, которую я считаю весьма полезной.

5
ответ дан 18 December 2019 в 10:46
поделиться

When I use Emacs to compile the minibuffer looks something like this;

make -k

and I just add any text I like, such as -f ../../root/Makefile. This might work for you.

Mark

1
ответ дан 18 December 2019 в 10:46
поделиться

I'm not much of an emacs user, but could you pass make -C ../ or however many directories up you need to go?

1
ответ дан 18 December 2019 в 10:46
поделиться

После нескольких попыток заставить EDE работать так, как я хотел, я выбрал .dir-locals.el :

((c ++ - mode. ((compile-command. "make -C ../build -j2 something"))))

Мне это показалось немного лучше, чем иметь // - * - - * - в заголовок каждого файла, и намного лучше, чем указывать в моем init.el (или любой другой конфигурации) те ede-cpp-root-project с полными путями к проектам, которые я либо создаю слишком часто, либо перемещаю внезапно :)

Хорошим дополнением к схеме был cmake , который делает ошибки компиляции «корректно устраняемыми», поскольку использует полные пути в сгенерированных make-файлах.

1
ответ дан 18 December 2019 в 10:46
поделиться

Я использую EDE (из CEDET) для определения проектов, и сохраните команды компиляции в определении проекта. Примеры можно найти в my config : строки 105-133 - примеры проектов, строки 135-165 - код, определяющий функции компиляции, и строки 168-189 - функции для различных типов проектов - - стандартный (компиляция из корневого каталога) и cmake (компиляция в отдельном каталоге)

2
ответ дан 18 December 2019 в 10:46
поделиться

(Я использую scons, но принцип тот же. Измените SConstruct на Makefile и scons, чтобы сделать ...)

Я настроил с помощью .emacs, чтобы он всегда компилировал проект, содержащий файл текущего буфера, хотя и глубоко вложенный; он ищет вверху первый SConstruct и использует его в качестве корневого каталога проекта.

Вот пара функций, которые ищут в иерархии каталогов SConstruct.

;; inspired by jds-find-tags-file in http://www.emacswiki.org/emacs/EmacsTags
(defun find-sconstruct ()
"recursively searches upwards from buffer's current dir for file named SConstruct and returns that dir. Or nil if not found or if buffer is not visiting a file"
  (labels
      ((find-sconstruct-r (path)
                          (let* ((parent (file-name-directory path))    
                                 (possible-file (concat parent "SConstruct")))
                            (cond
                             ((file-exists-p possible-file)
                              (throw 'found-it possible-file))
                             ((string= "/SConstruct" possible-file)
                              (error "No SConstruct found"))
                             (t (find-sconstruct-r (directory-file-name parent)))))))
    (if (buffer-file-name)
        (catch 'found-it
          (find-sconstruct-r (buffer-file-name)))
      (error "Buffer is not visiting a file"))))


(defun project-root ()    
  (file-name-directory (find-sconstruct)))

Затем вы можете изменить свою команду компиляции ] для использования корень проекта например

(concat "cd " (project-root) " && scons")
3
ответ дан 18 December 2019 в 10:46
поделиться

Другой альтернативой является установка переменной compilation-process-setup-function , которая задокументирована как:

Функция, вызываемая для настройки процесса компиляции. Эта функция вызывается непосредственно перед запуском процесса компиляции. Это может использоваться для установки любых переменных или функций, которые используются при обработка вывода процесса компиляции. Функция вызывается с переменными compilation-buffer 'и compilation-window' привязаны к буферу компиляции и окну соответственно.

Я много использую Maven и написал эту библиотеку для поддержки вашей проблемы в контексте Maven. Далее измените значение переменной compile-search-file соответствующим образом:

;;; Support for Maven 2

(require 'compile)

(setq compile-search-file "pom.xml")

(defun find-search-file ()
  ;; Search for the pom file traversing up the directory tree.
  (setq dir (expand-file-name default-directory))
  (let ((parent (file-name-directory (directory-file-name dir))))
    (while (and (not (file-readable-p (concat dir compile-search-file)))
        (not (string= parent dir)))
      (setq dir parent
        parent (file-name-directory (directory-file-name dir))))
    (if (string= dir parent)
    (error "Search file %s is missing" compile-search-file)
      (with-current-buffer compilation-last-buffer
    (message "Test %s %s." compilation-buffer compilation-window)
    (setq default-directory dir)))))

;; Add the following to support Emacs' compile mode:
(add-to-list
 'compilation-error-regexp-alist-alist
 '(mvn "^\\(.*\\):\\[\\([0-9]*\\),\\([0-9]*\\)\\]" 1 2 3))
(add-to-list 'compilation-error-regexp-alist 'mvn)

(setq compilation-process-setup-function 'find-search-file)

(provide 'maven-support)
2
ответ дан 18 December 2019 в 10:46
поделиться

Это должно сработать:

make -f path_to_rootdir/Makefile -I path_to_rootdir/tests

-F сообщает ему, какой make-файл использовать, -I сообщает ему, где искать файлы, которые будут включены в make-файл (которые не находятся в локальном каталоге).

0
ответ дан 18 December 2019 в 10:46
поделиться

Начните с Mx compile RET . Когда он запрашивает команду, просто введите cd / path / to / root && make и нажмите return. Эта команда работает для всех вариантов make и обрабатывает проблему "включенного make-файла" без каких-либо дополнительных флагов.

В следующий раз, когда вы наберете Mx compile RET , эта новая строка будет представлена ​​по умолчанию, поэтому вам нужно только нажать return. Если вы активно компилируете несколько проектов в emacs, вы можете использовать Mp и Mn для перемещения вперед и назад по истории команд компиляции.

0
ответ дан 18 December 2019 в 10:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: