2016년 9월 13일 화요일

Postmortem - compile warning option(-Wmissing-include-dirs)

현재 회사에서 진행하고 있는 과제에서 boost library를 사용하고 있다.
일전에 build 수행시 boost library 경로를 잘 못 설정해서 일주일 정도 문제 원인 분석에 애를 먹었던 적이 있는데,

요약하면 아래와 같다.

1. 프로젝트 코드가 참조하는 boost library header dir -> 'A'
2. tool chain에 포함된 boost library header dir -> 'B'

명시적으로 프로젝트 코드가 'A'를 참조하도록 make option을 작성했으나,
결과적으로 잘못된 dir를 기술하여 build시에는 'B'가 참조되었다.
- toolchain의 cpp(C Pre-Processor)를 사용하여 아래와 같이 명령을 내려보면 toolchain이 참조하는 system include dir를 확인할 수 있다.


$ cpp -v 

...
#include "..." search starts here:
#include <...> search starts here:    <- 여기서부터 toolchain이 참조하는 system include dir 시작
 /usr/lib/gcc/x86_64-linux-gnu/5/include
 /usr/local/include
 /usr/lib/gcc/x86_64-linux-gnu/5/include-fixed
 /usr/include/x86_64-linux-gnu
 /usr/include
End of search list.

회사에서 사용하는 toolchain system include dir를 확인해본 결과 dir중 하나에 boost library dir가 공교롭게 포함되어 있었던 것.
위 결과를 확인하기 전까지는 회사에서 사용중인 toolchain에 boost library가 포함된 것을 알고 있지도 못했다.
해당 문제와 같은 유사 문제가 발생하지 않도록 makefile내 compile option에 "-Wmissing-include-dirs"를 추가하도록 하였다.
만약 존재하지 않은 dir를 참조할 경우 아래와 같이 warning을 출력해 준다.

$ g++ -c -Wall -Wmissing-include-dirs -I/non_exist_dir test.cpp

cc1plus: warning: /non_exist_dir: No such file or directory [-Wmissing-include-dirs]
소스코드 compile시에 추가하면 좋은 warning option들이 아래 site에 소개되어 있다. http://www.network-theory.co.uk/docs/gccintro/gccintro_32.html

댓글 없음:

댓글 쓰기