gtk 라이브러리 내부를 디버깅해 보고 싶어서 빌드 스크립트 작성법을 공부하게 되었다.
리눅스 환경에서 빌드는 Makefile을 통해서 주로 진행하는데, 이 파일의 작성법을 익히는 게 쉽지 않다. 추가해야 할 라이브러리가 많아지만 작성하게 되는 분량이 지수적으로 증가하는데 gtk의 Makefile은 1000줄이 넘는다. 이를 좀 더 쉽게 만들기 위해서 GNU 빌드 시스템이 등장하게 되었다. 그 중에서도 autotools가 configure 스크립트와 관련이 있다.
autotools 자체는 kldp 위키에 자세히 소개되어 있어서, 이번에는 configure 관련 스크립트를 수정하여 디버깅 옵션을 추가하는 방법에 대해서만 정리하려고 한다.
-
gtk앱의 소스코드를 받아서 1차적으로 빌드하면(apt source gtk+-3.0 --build) configure 파일을 포함해서 Makefile 까지 자동으로 생성된다. configure에는 help 로 사용할 수 있는 옵션을 보여주는 기능이 있다.
./configure --help
옵션을 쭉 살펴보면 --enable_debug 라는 옵션이 있는데, 이 옵션을 활성화하면 컴파일 시 디버깅 심볼까지 함께 컴파일할 수 있다. 하지만 실제로 configure 파일을 들여다보면 enable debug 관련 명령어가 전부 if-else로 구분되어 있는 것이 확인된다.
# Checks for argument
# Check whether --enable-debug was given.
if test "${enable_debug+set}" = set; then :
enableval=$enable_debug; CFLAGS="$CFLAGS -w -g -O1" CXXFLAGS="$CXXFLAGS -w -g -O1"
else
CFLAGS="$CFLAGS -w -O3" CXXFLAGS="$CXXFLAGS -w -O3"
fi
즉, 전 단계엔 configure.ac 파일에서 debug 옵션을 줘야 하는 것이라고 생각했고, 이에 따라서 configure.ac 파일에 enable debug 옵션을 작성해 주면 빌드할 수 있다.
AC_ARG_ENABLE(debug,
AC_HELP_STRING([--enable-debug], [enable debugging (default: yes)]),
[CFLAGS="$CFLAGS -w -g -O1" CXXFLAGS="$CXXFLAGS -w -g -O1"],
[CFLAGS="$CFLAGS -w -O3" CXXFLAGS="$CXXFLAGS -w -O3"])
참고
GNU 빌드 시스템 사용법 : https://airs.com/ian/configure/
The GNU configure and build system - Table of Contents
airs.com
kldp 위키 : http://wiki.kldp.org/wiki.php/DocbookSgml/Autotools-KLDP
'토막지식' 카테고리의 다른 글
WARNING : REMOTE HOST IDENTIFICATION HAS CHANGED (0) | 2020.12.15 |
---|
댓글