Сконфигурируйте Emacs Flymake для прямого вызова g++

Когда пишу простой, один файл, код C++, я обычно вызываю g ++ напрямую. По умолчанию Flymake предполагает наличие Makefile с целью проверки синтаксиса. Как настроить Flymake для прямого вызова g ++ напрямую, например:

g++ -c a.cpp

Если бы ответ мог быть изменен, чтобы включить флаги компилятора, это было бы еще лучше

Большое спасибо

1 ответ

Решение

Вы можете вызвать g++ напрямую с помощью следующей конфигурации flymake.

(require 'flymake)

(defun flymake-cc-init ()
  (let* ((temp-file   (flymake-init-create-temp-buffer-copy
                       'flymake-create-temp-inplace))
         (local-file  (file-relative-name
                       temp-file
                       (file-name-directory buffer-file-name))))
    (list "g++" (list "-Wall" "-Wextra" "-fsyntax-only" local-file))))

(push '("\\.cpp$" flymake-cc-init) flymake-allowed-file-name-masks)
(add-hook 'c++-mode-hook 'flymake-mode)

Я получил следующий скриншот, когда я звоню flymake-allowed-file-name-masks

flymake-C

Ниже приводится версия комментария.

;; Import flymake
(require 'flymake)

;; Define function
(defun flymake-cc-init ()
  (let* (;; Create temp file which is copy of current file
         (temp-file   (flymake-init-create-temp-buffer-copy
                       'flymake-create-temp-inplace))
         ;; Get relative path of temp file from current directory
         (local-file  (file-relative-name
                       temp-file
                       (file-name-directory buffer-file-name))))

    ;; Construct compile command which is defined list.
    ;; First element is program name, "g++" in this case.
    ;; Second element is list of options.
    ;; So this means "g++ -Wall -Wextra -fsyntax-only tempfile-path"
    (list "g++" (list "-Wall" "-Wextra" "-fsyntax-only" local-file))))

;; Enable above flymake setting for C++ files(suffix is '.cpp')
(push '("\\.cpp$" flymake-cc-init) flymake-allowed-file-name-masks)

;; Enable flymake-mode for C++ files.
(add-hook 'c++-mode-hook 'flymake-mode)
Другие вопросы по тегам