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;
}