본문 바로가기

IT/프로그래밍

[C/C++] Linux/Unix환경에서 ifdef 쉽게 추가하고 삭제하기

728x90

원글(이글루): 2011-03-21 02:03:44

C/C++ Linux/Unix환경에서 ifdef 쉽게 추가하고 삭제하는 방법입니다.

1) vi에서 ifdef 편하게 넣기
~/.vimrc에 다음과 같이 추가
func! InsertIfdef(DEFNAME)
  exe "normal 0i#ifdef ".a:DEFNAME
  exe "normal a\<ENTER>#else // ".a:DEFNAME
  exe "normal a\<ENTER>#endif // ".a:DEFNAME
  exe "normal a\<ENTER>"
endfunc
map <F8> :call InsertIfdef("AAA") <CR>

추가한후 바로 적용하려면,
:source ~/.vimrc
하시면 되구요.
사용할땐 F8 만 누르면 ifdef 하고 지정한 게 들어가게 됩니다.

2) ifdef 제거하기
unifdef 간단한 사용법
C/C++ Linux/Unix환경에서 idef 어쩌구 된것을 제거해주는 어플입니다.
ex) BBB는 undefine형태이고 AAA는 define 한것을
추출할때,
unifdef test.cpp -UBBB -DAAA  >t

출처가 사라질까봐 첨부파일로 unifdef 소스 첨부합니다.
unifdef-2.6.tar.gz
- 출처: http://freshmeat.net/projects/unifdef
- help정보
usage: unifdef [-bBcdeKknsStV] [-Ipath] [-Dsym[=val]] [-Usym] [-iDsym[=val]] [-iUsym] ... [file]

- 이외에도 vim에서 해주는 스크립트가 있는데,
http://www.vim.org/scripts/script.php?script_id=2381
좀 완성도가 미흡한 점이 있어서 unifdef 유틸을 강추합니다.
unifdef는 define되었다고 지정한 것과 안했다고 지정한 것만 건들여주더군요.



부록1) vim에서 make 단축키 걸기
추가로 gcc/g++에서 Makefile을 사용한다면
map <F9> :call Compile() <CR>
func! Compile()
  exe ":wa"
  exe ":!make"
endfunc

이렇게 해놓고 F9를 활용하는 것도 좋다. 전체 창을 Save하고 make를 실행해주는 것이다.

부록2) ifdef 테스트 예제
#define AAA
// comment 1
#ifdef BBB
#ifdef AAA
// comment 2
#else // AAA
// comment 3
#endif // AAA
#else // BBB
#ifdef AAA
// comment 4
#else // AAA
// comment 5
#endif // AAA
#endif // BBB

부록3) 현재 디렉토리에서 특정 define을 unifdef 돌려서 OUT디렉토리로 넣는 스크립트
( 이거랑 http://parkmo.egloos.com/3922433 를 같이 써서 잘되는지도 비교해 보면 좋을 듯 )
#!/bin/bash

FIND_DEFINE="$1"
OUT_DIR=OUT
BIN_FILE=unifdef

if [ "${FIND_DEFINE}" == "" ]; then
  echo "$0 <define>"
  exit
fi
FILE_LIST=`grep -l ${FIND_DEFINE} *.cpp *.h`

mkdir -p ${OUT_DIR}
for ACC in $FILE_LIST
do
  echo "unifdef -D${FIND_DEFINE} ${ACC} > ${OUT_DIR}/${ACC}"
  ${BIN_FILE} -D${FIND_DEFINE} ${ACC} > ${OUT_DIR}/${ACC}
done

728x90