Autotools Autoconf, automake Further Study

Slides:



Advertisements
Similar presentations
서울지하철노조 설립. 1. 전형적 공기업 군사 문화 가 일 개통 1 호선 서울시 공무원으로 운영 일 3.4 호선 건설한 공사와 합병 공무원신분에서 신분변경 나. 공사 내부의 군사 조직과 군사문화 - 공사 사장 감사 이사 ( 별.
Advertisements

언어의 자서전 소단원 (1) 단원. 언어의 특성 기호성 자의성 사회성 규칙성 창조성 역사성.
Embedded System Lab. II GUI Programming in Embedded Linux 경희대학교 컴퓨터공학과 조 진 성.
8 스니핑.
Root File System 충북대학교 지능로봇연구실.
Introduction to Django
시작부터 끝까지 진지한 궁서체로 진행하는 완벽한 주입식의 하드코어한 리눅스/장난감 세미나
암 보다 더 무서운 당뇨 2010년 [아시아경제 강경훈 기자 ].
05. gcc, make, gdb.
FTP 09 SPARCS 박철웅 [dothack].
리눅스 실습 정성훈.
전산회계1급 기출 50회 신성대학교 세무부동산과 김상진.
컴퓨터 네트워크 실습.
C 프로그래밍 소개 숙명여대 창병모 2011 가을.
제6장 FUSING.
개발 환경 개발 환경 개요 PXA270과 타겟 시스템 툴체인 환경 구축 JTAG 유틸리티 미니컴 Make 유틸리티
크로스 컴파일 환경 구축.
Makefile의 이해 ㈜FALinux 박진호.
제16장 QT/Embedded.
제4장 Cross Compiler 설치.
MySQL RENO.
FUSING.
임베디드 프로그래밍 Lecture #
1 유닉스 시스템 프로그래밍 개요.
[beginning] Linux & vi editor
작 성 자: 김선영 메 일: sunyzero (at) gmail (dot) com 버 전: 1.30
목차 커널의 개념 및 기능 커널 포팅 램디스크.
Linux System Programming
인터넷 주소 변환 School of Electronics and Information. Kyung Hee University.
Linux/UNIX Programming
-Part3- 제5장 전처리기와 파일 분할 컴파일
컴퓨터 네트워크 실습.
임베디드 시스템 개론 3주차 Embedded System..
Embedded System Porting (2)
운영체제 허상복 컴퓨터시스템 연구실
Socket Address Structure and Byte Ordering Functions
18장. 헤더 파일과 구현 파일 01_ 헤더 파일과 구현 파일의 사용.
Internet Protocol and Programming
Socket Address Structure and Byte Ordering Functions
Geek-OS Project 정영진
커널 모듈 프로그래밍 (Kernel Module Programming)
전자의료시스템 및 실습 C-언어 구 환 경희대학교 전자정보대학 동서의료공학과.
실시간 자원 량 정보 제공을 결합한 Heartbeat
Linux/UNIX Programming
Mips cross compile OS LAB.
제 11 장 전처리기.
6. 파일 관리. pwd(print working directory)와 cd(change directory) ls(list)
PHP 설치.
제10장 파일 시스템 인터페이스(File System Interface)
제13장 전처리 및 기타기능.
C언어 프로그래밍의 이해 Ch13. 선행처리기와 주석문.
제 4장 전처리기와 매크로 Hello!! C 언어 강성호 김학배 최우영.
Appendix. WURFL 브라우저 살펴보기
Appendix A 구조적 시스템 개발 방법론.
Itbank solaris Pm 4:00 class 김 정 훈
Stepper Motor 디바이스 드라이버
Lecture Notes on Computer Networks 주 홍 택 컴퓨터공학과 계명대학교
Linux/UNIX Programming
GoAhead Web Server.
Operating System Multiple Access Chatting Program using Multithread
C언어 개론.
뇌를 자극하는 C 프로그래밍.
1학기 정리 지난 학기에 배운 내용을 복습해 본다..
시스템 인터페이스 Lab#6 C 쉘 프로그래밍 실습.
(Ⅰ) 독서와 언어의 본질 언어의 본질 1 2 [고등 국어] – 독서와 문법 독서의 본질 (1) 독서의 특성
노인학대예방 교육 교육강사 시 설 장 송나겸 보성실버센터.
유예 X-FILE *조사자* 1301권희원 1315이예지 1317장아정 1322홍자현.
Makefile
우리나라에서 10대로 살아가기 엘리트조 오정희 / 송지선 / 손시하 / 박주현 / 김소현.
Intelligent software Lab. 전재원
Presentation transcript:

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 config.status : Makefile.in을 Makefile로 만들기 위한 스크립트

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 등이 실패한 경우

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

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로 만드는 것 참조되어생성 변환

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로 만드는 것 참조되어생성 변환

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로 만드는 것 참조되어생성 변환

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 를 직접 열어서 확인하자.

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 을 자주 열어보자.

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 t s,@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

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: @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

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

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

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 – 로 확인 해본다.

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> 등 옵션 목록.