flymake を使用して、Emacs で動作する C++ コードの構文を強調表示しようとしています。C++ の標準的な flymake 構成では、それが試行および実行されることはわかっていますmake syntax-check
が、私のビルド システムは Makefile を使用しません (少なくとも直接は使用しません)。ROS システムの cmake のラッパーであるrosmakeを使用します。
Makefile を制御できないという事実を回避するために、flymake Web サイトとこの stackoverflow questionに基づいてカスタム flymake チェッカーを追加しようとしました。
コマンドを作成しましたg++ -Wall -Wextra -fsyntax-only -Iinclude_dir file_to_check.cpp
。bash でコマンドを実行すると、期待どおりの出力が得られます。構文エラーがなければ、終了コードは 0 で出力はありません。構文エラーがある場合、終了コード 1 と行ごとにリストされたエラーがあります。ただし、これを flymake で実行しようとすると、常に CFGERR が発生し、flymake が無効になっていると言われます。
エラーには完全なコマンドが表示され、すべてがターミナルに入力したものと同じに見えるため、正しいコマンドが実行されていると確信しています。問題が何であるかを確認するために、ログレベルを 3 まで上げました。ログの途中でエラーがあります
file /home/rhololkeolke/ros_workspace/team-hku-drc/robot_code/state_trigger/src/Broadcaster.cpp, init=flymake-cc-init [3 times]
create-temp-inplace: file=/home/rhololkeolke/ros_workspace/team-hku-drc/robot_code/state_trigger/src/Broadcaster.cpp temp=/home/rhololkeolke/ros_workspace/team-hku-drc/robot_code/state_trigger/src/Broadcaster_flymake.cpp
saved buffer Broadcaster.cpp in file /home/rhololkeolke/ros_workspace/team-hku-drc/robot_code/state_trigger/src/Broadcaster_flymake.cpp
started process 14517, command=(g++ -Wall -Wextra -fsyntax-only -std=c++0x -I/home/rhololkeolke/ros_workspace/team-hku-drc/robot_code/state_trigger/include -I/home/rhololkeolke/ros_workspace/team-hku-drc/robot_code/state_trigger/msg_gen/cpp/include -I/home/rhololkeolke/ros_workspace/team-hku-drc/robot_code/state_trigger/srv_gen/cpp/include -I/opt/ros/fuerte/include
Broadcaster_flymake.cpp), dir=/home/rhololkeolke/ros_workspace/team-hku-drc/robot_code/state_trigger/src/
received 40 byte(s) of output from process 14517
file /home/rhololkeolke/ros_workspace/team-hku-drc/robot_code/state_trigger/src/Broadcaster.cpp, init=flymake-cc-init
parsed 'g++: error: : No such file or directory', no line-err-info
file /home/rhololkeolke/ros_workspace/team-hku-drc/robot_code/state_trigger/src/Broadcaster.cpp, init=flymake-cc-init
process 14517 exited with code 1
cleaning up using flymake-simple-cleanup
deleted file /home/rhololkeolke/ros_workspace/team-hku-drc/robot_code/state_trigger/src/Broadcaster_flymake.cpp
Broadcaster.cpp: 0 error(s), 0 warning(s), 0 info in 0.07 second(s)
switched OFF Flymake mode for buffer Broadcaster.cpp due to fatal status CFGERR, warning Configuration error has occured while running (g++ -Wall -Wextra -fsyntax-only -std=c++0x -I/home/rhololkeolke/ros_workspace/team-hku-drc/robot_code/state_trigger/include -I/home/rhololkeolke/ros_workspace/team-hku-drc/robot_code/state_trigger/msg_gen/cpp/include -I/home/rhololkeolke/ros_workspace/team-hku-drc/robot_code/state_trigger/srv_gen/cpp/include -I/opt/ros/fuerte/include
Broadcaster_flymake.cpp)
主なエラーは次のようparsed 'g++: error: : No such file or directory', no line-err-info
です。Broadcaster_flymake.cppが作成されていないためではないかと思いましたが、それを確認したところ、機能しているようです。構文エラーがあるかどうかに関係なく、これらのエラーが発生します。コマンドをコピーしてBashに貼り付けると完全に機能するため、ファイルが見つからない理由がわかりません。(shell-command "g++")
emacsがg ++バイナリを見つけていることを確認するためだけに、バッファも試しました。
flymake がコマンドの実行に失敗する理由がわかっている場合は、お知らせください。ありがとうございました。