我想獲得使用flymake在Emacs中工作的C++代碼的語法高亮顯示。我知道,使用C++的標準flymake配置,它會嘗試運行make syntax-check
,但是,我的編譯系統不使用Makefile(或至少不是直接)。它使用rosmake這是ROS系統的cmake封裝。Flymake CFGERR使用自定義的g ++命令
爲了解決我無法控制Makefile的問題,我一直試圖添加一個基於flymake website和this 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無法運行該命令,請讓我知道。謝謝。