2013-04-01 3 views
0

flymake를 사용하여 이맥스에서 작동하는 C++ 코드에 대한 구문 강조 표시를 얻으려고합니다. 나는 C++을위한 표준 플라이 메이크 구성을 가지고 있는데, make syntax-check을 시도하고 실행할 것임을 알고 있지만, 내 빌드 시스템은 Makefile을 사용하지 않는다. ROS 시스템에서 cmake에 대한 랩퍼 인 rosmake을 사용합니다.플라이 메이크 CFGERR 커스텀 g ++ 명령어 사용

내가 Makefile을 제어 할 수 없다는 사실을 알기 위해 나는 flymake websitethis stackoverflow question을 기반으로 맞춤형 플라이 메이크 체커를 추가하려고 시도했다.

나는 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++")을 시도하여 이맥스가 g ++ 바이너리를 찾고 있는지 확인했습니다.

flymake가 명령을 실행하는 데 실패한 이유가 있다면 알려주십시오. 고맙습니다.

답변

0

문제점이 무엇인지 알아 냈습니다. 나는 flymake-get-project-include-dirs 함수를 오버로딩했다. 그 기능에서 나는 현재 ROS 패키지에 필요한 include 디렉토리를 얻기 위해 rospack cflags-only-I 명령을 실행하고 있었다. 내가 깨닫지 못했던 것은 rospack 명령의 출력 처리가 끝난 후 마지막 include 디렉토리에 줄 바꿈 문자가 포함되어 있다는 것입니다. 내가 버퍼에서 실행하려고하는 명령을 보았을 때 파일 이름이 항상 새로운 행에 있음을 알았지 만 그 파일은 형식화 된 것으로 생각했습니다.

이제 모든 include 디렉토리에서 모든 newline을 제거했습니다. 모든 것이 잘 작동합니다.

관련 문제