1 / 15

Autotools

Autotools. Autoconf, automake Further Study Hojin Choi <pynoos@users.kldp.net>. 일반적인 Build. Build ./configure make make dist ( 배포본 만들 때 ) make install ( 설치할 때 ) configure 생성물 Makefile : 궁극적인 산출물 config.h : system 의존 요소에 대한 Macro 정의 Header

avery
Download Presentation

Autotools

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Autotools Autoconf, automakeFurther Study Hojin Choi <pynoos@users.kldp.net>

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

  3. make 확인하고 넘어가기 • Makefile 기본적인 구성은 • 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 • 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 autoheader autoconf configure(config.status) 설치된 library 모든 매크로 확장 개발자가 손으로 만드는 것 개발자가 툴로 만드는 것 Makefile 사용자가 configure로 만드는 것 config.h 참조되어생성 변환

  7. 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 autoheader autoconf configure(config.status) 설치된 library 모든 매크로 확장 개발자가 손으로 만드는 것 개발자가 툴로 만드는 것 Makefile 사용자가 configure로 만드는 것 config.h 참조되어생성 변환

  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에 @ENV@ 를 둘 수 있다. • Makefile.am에 dependency 를 추가할 수 있다. • automake에 의해 생성되는 Makefile.in 과 autoconf에 의해 생성되는 Makefile 을 자주 열어보자.

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

  11. CH2. AC_SUBST 사용하기 • configure.in 에 다음과 같은 문장을 넣는다. • HOJIN="News from a far is seldom sooth. - King Theoden" MODEL=-DFORUNIXTHREADLIB=-lpthread AC_SUBST(HOJIN) AC_SUBST(MODEL) AC_SUBST(THREADLIB) • Makefile.in 을 다음과 같이 작성한다. • all: @echo Thread library link option: @THREADLIB@ @echo Message : @HOJIN@ gcc @MODEL@ a.c @THREADLIB@ • 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 • 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 = samplebinsamplebin_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> 등 옵션 목록.

More Related