dir-locals.el for flymake

((c++-mode . ((flymake-additional-compilation-flags . ("-I<include_path>")))))

flymake

(defun my:flymake-lazy-start ()
  ;; To use file (directory) local variables in flymake,
  ;; run flymake lazily
  (lexical-let ((target-buffer (current-buffer)))
    (run-at-time
     0.001 nil
     (lambda ()
       (with-current-buffer target-buffer
         (when buffer-file-name (flymake-mode t)))))))

(add-hook 'c-mode-hook 'my:flymake-lazy-start)
(add-hook 'c++-mode-hook 'my:flymake-lazy-start)
(defvar flymake-additional-compilation-flags nil)
(put 'flymake-additional-compilation-flags 'safe-local-variable 'listp)
 
(defvar my-flymake-c-compiler "gcc")
(defvar my-flymake-cc-compiler "g++")
(put 'my-flymake-c-compiler 'safe-local-variable 'stringp)
(put 'my-flymake-cc-compiler 'safe-local-variable 'stringp)
 
(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)))
         (common-args (append (list "-Wall" "-W" "-fsyntax-only" local-file)
                              flymake-additional-compilation-flags)))
    (if (eq major-mode 'c++-mode)
        (list my-flymake-cc-compiler common-args)
      (list my-flymake-c-compiler common-args))))

(loop for ext in '("\\.c$" "\\.h$" "\\.cc$" "\\.cpp$" "\\.hh$")
      do
      (push `(,ext flymake-cc-init) flymake-allowed-file-name-masks))

pthread

#include <list>
#include <iostream>
#include <pthread.h>
#include <functional>

class Runner {
    int id_;
    pthread_t thread_;

public:
    Runner(int id): id_(id) {
        pthread_create(&thread_,
                       NULL,
                       reinterpret_cast<void* (*) (void*)>(&Runner::start_runner),
                       reinterpret_cast<void*>(this));
        pthread_join(thread_, NULL);
    }

    void start() {
        std::cout << "My id is " << id_ << std::endl;
    }

    static void* start_runner(void* runner) {
        reinterpret_cast<Runner*>(runner)->start();
    }
};

class Manager {
    typedef std::list<Runner> RunnerList;

    RunnerList runner_list_;

public:
    Manager() {
        //
    }

    void add_runner() {
        runner_list_.push_back(Runner(runner_list_.size()));
    }

    void wait() {
    }
};

int main(int argc, char **argv)
{
    Manager manager;

    manager.add_runner();
    manager.add_runner();
    manager.add_runner();

    return 0;
}

トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS