AUTOTOOLS Howto
이승윤
sylee (at) inzen.com
$Date $
Copyright 2002 by
이 문서는 GNU Free Documentation License 버전 1.1 혹은 자유 소프트웨어 재단에서 발행한 이후 판의 규정에 따르며 저작권에 대한 본 사항이 명시되는 한 어떠한 정보 매체에 의한 본문의 전재나 발췌도 무상으로 허용됩니다.
고친 과정 | ||
---|---|---|
고침 1.01 | 2002년 5월 7일 | 고친이 sylee |
둘째버젼 |
- 차례
- 1. autotools requirement
- 2. 개요
- 3. configure.ac
- 4. Makefile.am
- 5. how it works
- 6. 참고
- 6.1. aclocal
- 6.2. autoheader
- 6.3. autoscan
- 7. 간단한 예제 - minimal project
- 7.1. 소스의 위치
- 7.2. autotools 입력 화일들의 위치
- 7.3. 최상위 directory 의 Makefile.am 의 역할
- 7.4. configure.ac 의 역할
- 7.5. 하부 directory 의 Makefile.am 의 역할
- 7.6. 실행순서
- 7.7. 요약과 전체 흐름 정리
- 8. 기본 template - configure.ac, Makefile.am
- 8.1. configure.ac
- 8.2. Makefile.am
- 9. 미시적 autotools 의 이용
- 10. 참고자료
2. 개요
1. configure.ac 에 Makefile 이 필요로 하는 사항들을 기록한다.
2. Makefile.am 에 이들 가변수를 사용하여 Makefile 의 초안을 작성한다.
3. configure 실행시에 configure.ac 에 지정한 항목들이 check 되면서 Makefile.am 에서 필요한 정보들이 유효한 값들로 치환된다.
3. configure.ac
보통 이미 지정된 macro 를 사용하여 원하는 정보를 얻거나 설정할수있다.
AC_CANONICAL_SYSTEM : 현재 시스템에 대한 정보를 가져온다.
AC_PROG_CC : cc 가 사용가능한지를 check
AC_CHECK_HEADERS : 지정하는 header file 들이 시스템에 있는지 검사한다. HAVE_NAME_H 를 만들어준다.
AC_TYPE_ : 지정한 type definition 을 확인한다.
AC_SUBST : configure.ac 에서 사용한 변수들이 configure 시 *.in 파일에 지정한 변수를 찾아 유효값을 넣어준다.
4. Makefile.am
기본적인 Makefile 의 틀을 지니고 있지만, configure 에 따라 결정되는 변수들을 사용하고 있다.
가장 상위 directory 의 Makefile.am 에는 컴파일할 하위 directory 를 정하게 된다.
hello.c 의 Makefile.am PFLAG = @PFLAG@ : configure 를 통해 알아낸 값 가져옴 bin_PROGRAMS = world : 컴파일후의 프로그래명 지정 world_SOURCES = hello.c : 해당 프로그램의 소스지정 AM_CFLAGS = $(PFLAG) : 컴파일시의 flag 지정 macro |
6. 참고
autoconf,automake 를 실행하기 전에 이들을 보조하는 역할을 수행할 수 있는 것으로 aclocal, autoheader, autoscan이 있다.
7. 간단한 예제 - minimal project
작은 예제를 통해서 autotool 을 사용하는 방법을 보이겠습니다.
이들이 놓이게 될 장소와 이들을 가지고 원하는 작업을 수행하게 될 autotools 관련 파일들이 놓이게 될 위치를 아래에서 보이도록 하겠습니다.
7.2. autotools 입력 화일들의 위치
. project directory./configure.ac./Makefile.am./solaris/solaris.c./solaris/Makefile.am./linux/linux.c./linux/Makefile.am |
이제 각 directory 에 위치한 configure.ac, Makefile.am 이 어떻게 작동하는 지 살펴보자.
7.3. 최상위 directory 의 Makefile.am 의 역할
SUBDIRS=@DIRS@ |
이제 configure 에서 이 DIRS 값을 어떻게 결정하고 Makefile.am 에 넘겨주는지 보도록 한다.
7.4. configure.ac 의 역할
AC_CANONICAL_SYSTEMcase "$target" in i?86-*-linux*) DIRS="linux" ; AC_SUBST(DIRS) ;; *solaris*) DIRS="solaris" ; AC_SUBST(DIRS) ;; *) echo unsupported system : $target ;;esac |
7.5. 하부 directory 의 Makefile.am 의 역할
./linux/Makefile.ambin_PROGRAMS = linuxlinux_SOURCES = linux.c |
AC_PREFIX_DEFAULT(/usr/eostk) |
라고 정의하였다면, 이 bin 은 /usr/eosrk/bin 이 되고 linux 프로그램은 그 아래에 install 된다.
7.6. 실행순서
aclocal autoheader autoconf automake --add-missing -copy ./configure make make check make install |
8. 기본 template - configure.ac, Makefile.am
8.1. configure.ac
configure.ac 에서는 check 사항들을 test 하는 일반적인 순서가 정해져있다. 이 순서를 따르면서 필요한 사항들만 검사하면 된다. 대략적인 순서는
# Process this file with autoconf to produce a configure script.AC_INIT(eostk, 1.0, sylee@inzen.com)AM_INIT_AUTOMAKE(eostk, 1.0)AM_CONFIG_HEADER(config.h:config.h.in)# Checks for programs.AC_PROG_CCAC_PROG_INSTALL# Checks for libraries.AC_CHECK_LIB(socket, connect)# Checks for header files.AC_HEADER_DIRENT# Checks for typedefs, structures, and compiler characteristics.AC_TYPE_UID_TAC_TYPE_PID_T# Checks for library functions.AC_HEADER_STDCAC_CHECK_FUNCS(strcpy bcopy)# Finally, make output filesAC_CONFIG_FILES( Makefile solaris/Makefile linux/Makefile)AC_OUTPUT |
8.2. Makefile.am
check_PROGRAMS = test1test1_SOURCES = test1.ccheck_SCRIPTS = test2TESTS = test1 test2install-exec-hook : chmod +x INSTALL.solaris ./INSTALL.solaris |
9. 미시적 autotools 의 이용
AC_CHECK_FUNCS(strcpy bcopy) |
#define HAVE_BCOPY 1 |
strcpy 를 사용하는 code 시작 부분 혹은 그 code 가 include 하는 header file
#if !HAVE_STRCPY# if HAVE_BCOPY# define strcpy(dest,src) bcopy(src, dest, 1+strlen(src))# else error no strcpy or bcopy# endif#endif |
'[Develope] > Network' 카테고리의 다른 글
per-process timer :: timer_create (0) | 2005.06.13 |
---|---|
per-process timers :: timer_getoverrun, timer_gettime, timer_settime (0) | 2005.06.13 |
RTS를 이용한 Asynchronous IO (0) | 2005.05.20 |
IOCP[출처:CodeProject] (0) | 2005.05.20 |
Asynchronous IO (0) | 2005.02.21 |