Presentation is loading. Please wait.

Presentation is loading. Please wait.

Autotools Autoconf, automake Further Study

Similar presentations


Presentation on theme: "Autotools Autoconf, automake Further Study"— Presentation transcript:

1 Autotools Autoconf, automake Further Study
Hojin Choi

2 일반적인 Build Build ./configure make make dist (배포본 만들 때)
make install (설치할 때) configure 생성물 Makefile : 궁극적인 산출물 config.h : system 의존 요소에 대한 Macro 정의 Header config.status : Makefile.in을 Makefile로 만들기 위한 스크립트

3 make 확인하고 넘어가기 Makefile 기본적인 구성은 ACTION 상세 VARIABLE=CONTENTS
TARGET_FILES: DEPENDENCY_FILES <TAB>ACTION <TAB>ACTION ACTION 상세 <TAB>으로 되어있으면 한 줄 한 줄마다 다른 shell이 실행되어 수행됨, 따라서 연이은 동작은 “;” 으로 구분하여 한줄에 써야함. @ 로 시작하면 화면에 명령줄을 출력하지 않음 기본적으로 ACTION의 exit값이 0 이어야 다음줄이 수행되지만 ‘-’ 로 시작하는 줄은 exit 값 무시하고 다음줄로 수행을 계속함. exit 0 이아닌 경우 예시 gcc 가 compile error를 낼 경우 rm 이 실패한 경우 cp 등이 실패한 경우

4 Autotool Family Autoconf family Automake family
autoconf : 모든일을 마무리하는 shell script autoheader : config.h.in 을 만들어 주는 perl script autoscan : configure.scan 을 만들어 주는 perl script autoreconf : autoconf, aclocal, automake 를 하위 디렉토리까지 호출해주는 perl script Automake family automake : Makefile.in을 만들어 주는 perl script aclocal : aclocal을 만들어 주는 perl script

5 Autoconf/Autoheader 세상
/usr/share/autoconf/*.m4 configure.in Makefile.in aclocal.m4 config.h.in autoheader autoconf configure (config.status) 모든 매크로 확장 설치된 library 개발자가 손으로 만드는 것 Makefile 개발자가 툴로 만드는 것 config.h 사용자가 configure로 만드는 것 참조되어생성 변환

6 Autoconf/Autoheader 세상(짜브버전)
/usr/share/autoconf/*.m4 configure.in Makefile.in config.h.in aclocal.m4 autoconf autoheader configure (config.status) 설치된 library 모든 매크로 확장 개발자가 손으로 만드는 것 Makefile 개발자가 툴로 만드는 것 config.h 사용자가 configure로 만드는 것 참조되어생성 변환

7 configure (config.status)
Automake/Aclocal 세상 Makefile.am /usr/share/automake/*.m4 acinclude.m4 automake aclocal /usr/share/autoconf/*.m4 AM_ 계열 매크로 모음 configure.in Makefile.in config.h.in aclocal.m4 autoconf autoheader configure (config.status) 설치된 library 모든 매크로 확장 개발자가 손으로 만드는 것 Makefile 개발자가 툴로 만드는 것 config.h 사용자가 configure로 만드는 것 참조되어생성 변환

8 configure.in 만드는 자세 configure.in 에서 autoconf가 주의깊게 보는 것은 AC_, AM_, AH_ 로 시작하는 단어이다. AC_, AM_, AH_ 로 시작하는 단어가 - /usr/share/autoconf/*.m4 - aclocal.m4 에서 발견 되지 않으면 autoconf는 멈춘다. configure.in 은 sh script 라고 생각해도 무방하다. autoconf 는 automake의 존재에 대해 모른다고 생각해도 좋다. 되도록 [, ] 로 묶어서 블록 단위를 구별하자. 비록 한 단어라해도. configure 를 직접 열어서 확인하자. config.status 를 직접 열어서 확인하자.

9 Makefile.am 만드는 자세 모든 subdirectory에는 Makefile.am 을 만든다.
configure.in은 최상위 directory에 둔다. configure에서 모든 하위 Makefile들을 다 만든다고 생각하자. automake 는 dependency 마법사라고 생각하자. Makefile.am 은 변수 설정만으로 마법사에게 일거리를 준다. Makefile.am이 “bin_PROGRAMS” 등과 같이 “_”에 의해 나뉘는 것을 좋아하는 이유가 있다. (변수 자격요건) Makefile.am 은 Makefile.in 을 만드는 마음으로 생각한다. Makefile.in 은 Makefile 을 만드는 마음으로 생각한다. Makefile.am에 를 둘 수 있다. Makefile.am에 dependency 를 추가할 수 있다. automake에 의해 생성되는 Makefile.in 과 autoconf에 의해 생성되는 Makefile 을 자주 열어보자.

10 CH1. Makefile.in 만들기 내장 환경변수 알아 보기
config.status 를 열고 PACKAGE 라는 문자열을 찾는다. sed 에 들어가는 치환 공식을 음미한다. config.status 예제. sed s/,;t t/; t$/s/[\\&,]/\\&/g; t$/,;t t/' >$tmp/subs.sed <<\CEOF t t t t 1.0,;t t CEOF

11 CH2. AC_SUBST 사용하기 configure.in 에 다음과 같은 문장을 넣는다.
HOJIN="News from a far is seldom sooth. - King Theoden" MODEL=-DFORUNIX THREADLIB=-lpthread AC_SUBST(HOJIN) AC_SUBST(MODEL) AC_SUBST(THREADLIB) Makefile.in 을 다음과 같이 작성한다. all: @echo Thread library link option: @echo Message : gcc a.c a.c 에 pthread 관련 프로그램을 작성한다. Makefile 을 확인한다. all: @echo Thread library link option: -lpthread @echo Message : News from afar is seldom sooth. - King Theoden gcc -DFORUNIX a.c -lpthread

12 CH3. Header File 존재 확인 AC_CHECK_HEADERS autoheader 사용방법
AC_CONFIG_HEADERS([config.h]) AC_CHECK_HEADERS([pthread.h hserver.h]) 삽입 autoheader config.h.in 열어 적당한 autoheader template이 생성되었는지 확인한다. /* Define to 1 if you have the <pthread.h> header file. */ #undef HAVE_PTHREAD_H /* Define to 1 if you have the <hserver.h> header file. */ #undef HAVE_HSERVER_H 사용방법 #ifdef HAVE_PTHREAD_H #include <pthread.h> #endif

13 CH4. config.h.in에 뭔가를? 만약 ENDIAN 검출 후 특정한 Macro를 다음처럼 define해보자.
AC_C_BIGENDIAN( [ AC_DEFINE([HS_BIGENDIAN]) ], [ AC_DEFINE([HS_LITTLEENDIAN]) ] ) AH_TEMPLATE([HS_BIGENDIAN],[We guess this host big endian]) AH_TEMPLATE([HS_LITTLEENDIAN],[We guess this host little endian]) config.h.in 을 확인해보면 /* We guess this host big endian */ #undef HS_BIGENDIAN /* We guess this host little endian */ #undef HS_LITTLEENDIAN 그리고 ./configure한 후에 config.h 를 확인한다. /* We guess this host big endian */ /* #undef HS_BIGENDIAN */ /* We guess this host little endian */ #define HS_LITTLEENDIAN 1

14 CH5. Basic Makefile.am CH2의 Code를 가지고 Makefile 마법사에게 의뢰한다.
Makefile.am 은 변수 설정만으로 dependency를 만들어 낸다고 했다. bin_PROGRAMS = samplebin samplebin_SOURCES = a.c automake를 돌려 Makefile.in을 만들어 낸다. 위 내용이 Makefile.in에 들어 있는지 확인한다. 덤으로 따라 오는 것들 make all / make dist / make install / make uninstall make dist 를 해본다. (tar ball 만들기) 만들어지는 .tar.gz 파일을 gunzip –c <tar.gz file> | tar tvf – 로 확인 해본다.

15 CH6. Makefile.am 친구되기 하위 디렉토리의 Makefile.am 도 Makefile.in으로 만들기 또한 build tree에 참여시키기. SUBDIRS = lib src test dist tar ball에 포함시키기 EXTRA_DIST = ChangeLog.old CONTRIBUTORS 만들어 지는 binary file 목록 지정하기 bin_PROGRAMS = chkstatus chkstatus_SOURCES = 각종 .c .h chkstatus_CFLAGS = chkstatus 만들때 들어갈 c flags chkstatus_CXXFLAGS = chkstatus 만들때 들어갈 c++ flags chkstatus_LIBS = static lib files ( -lsocket 꼴이 아님. libcom.a) chkstatus_LDADD = shared lib files ( libcom.so 등) chkstatus_LDFLAGS = -L경로 –l<lib> 등 옵션 목록.


Download ppt "Autotools Autoconf, automake Further Study"

Similar presentations


Ads by Google