読者です 読者をやめる 読者になる 読者になる

びぃえるくぅと。

ガラケーは打楽器。

Flycheck の In file included from 警告を消す

emacs

備忘録です。

謎警告

最近 emacs で Node.js のネイティブモジュールを書いてみたり、 Qtアプリケーションを作ろうと頑張っているのですが、 #include 文のところで Flycheck に こんな警告をよく吐かれていました。

In file included from

In file included from

In file included from

In include /usr/local/opt/qt5/include/QtWidgets/QApplication

・・・そもそもこれエラーなのか何なのか。

原因

どうやら flycheck のバグだとか何だとか言われていて(某所だとパースエラーだとか)、 flycheck の警告文からでは何が問題なのかがわかりませんでした。 なので、flycheckがどのようなコマンドを叩いて、どのような結果を得ているのかを どうにか見れないか調べてみました。

色々調べてみたところ、

github.com

に書いてある通り、C-c ! C-c を叩くことで、実際に実行されているコマンドと 実行結果(解析結果)の全文を見ることができます。

結果

で、やってみたところ

 1*- mode: compilation; default-directory: "(省略)" -*-
 2Compilation started at Tue Nov  8 15:04:30
 3
 4clang -fsyntax-only -fno-color-diagnostics -fno-caret-diagnostics -fno-diagnostics-show-option -iquote (省略) -Wall -Wextra -I (省略)
 5In file included from <stdin>:1:
 6In file included from /usr/local/opt/qt5/include/QtWidgets/QApplication:1:
 7In file included from /usr/local/opt/qt5/include/QtWidgets/qapplication.h:43:
 8In file included from /usr/local/opt/qt5/include/QtCore/qcoreapplication.h:43:
 9/usr/local/opt/qt5/include/QtCore/qglobal.h:1133:23: warning: rvalue references are a C++11 extension
10In file included from <stdin>:1:
11In file included from /usr/local/opt/qt5/include/QtWidgets/QApplication:1:
12In file included from /usr/local/opt/qt5/include/QtWidgets/qapplication.h:43:
13In file included from /usr/local/opt/qt5/include/QtCore/qcoreapplication.h:43:
14In file included from /usr/local/opt/qt5/include/QtCore/qglobal.h:1145:
15In file included from /usr/local/opt/qt5/include/QtCore/qatomic.h:46:
16/usr/local/opt/qt5/include/QtCore/qbasicatomic.h:61:4: error: "Qt requires C++11 support"
17/usr/local/opt/qt5/include/QtCore/qbasicatomic.h:90:13: error: unknown type name 'QAtomicOps'
18/usr/local/opt/qt5/include/QtCore/qbasicatomic.h:90:23: error: expected member name or ';' after declaration specifiers
19/usr/local/opt/qt5/include/QtCore/qbasicatomic.h:93:23: error: use of undeclared identifier 'QAtomicOpsSupport'
20/usr/local/opt/qt5/include/QtCore/qbasicatomic.h:93:53: error: no member named 'IsSupported' in the global namespace
21/usr/local/opt/qt5/include/QtCore/qglobal.h:761:63: note: expanded from macro 'Q_STATIC_ASSERT_X'
22/usr/local/opt/qt5/include/QtCore/qglobal.h:756:110: note: expanded from macro 'Q_STATIC_ASSERT'

(以下略)

なるほど、原因はC++11絡みのところにあったらしいです。

何が原因かというと、C++11に対応していない状態で flycheck を動かしていたということでした。

stackoverflow.com

上記によると、emacs の設定ファイルに

(add-hook 'c++-mode-hook (lambda () (setq flycheck-gcc-language-standard "c++11")))

を追加することで、flycheckが C++11 に対応してくれるようです。 私の環境でもこれで治りました。

結論

Flycheck の謎警告に困ったら、 C-c ! C-c を見てみましょう。

Copyright © 2015 Yadex205