- auto + O: O를 만들어주는 유틸리티
- 🔍ex) automake, autoconf, etc.
- Makefile.am: automake(am)의 입력으로 들어가는 파일
- configure.ac: autoconf(ac)의 입력으로 들어가는 파일
🏷️autoconf & automake
- 중요한 유틸리티 및 입출력 파일을 먼저 설명한다.
📌1. autoconf
- auto + conf(igure)으로, configure 스크립트를 자동으로 만들어준다.
configure.ac
파일을 입력으로 받아서 configure
셸 스크립트를 생성하는 프로그램이다.
- 간단히 말하면 무엇을 체크할지 지정하는 파일이다.
- 사용된 각각의 행은 autoconf에서 미리 정의되어 있는 autoconf 매크로다.
- autoconf 매크로는 각 기능(검사)을 수행하는 셸 스크립트로 확장되어 configure 셸 스크립트를 구성하는 일부분이 된다.
- autoconf 매크로는 m4 매크로 처리기 형식의 매크로며, 포트란에서 사용된다.
- cpp0와는 비교도 안되는 처리를 수행할 수 있지만, m4는 매크로 처리기라서 핵심 임무는 매크로를 정의된 문자열(셸 스크립트)로 치환하는 것이다.
- autoconf 매크로가 아닌 문자열을 만나면 configure 셸 스크립트에 그대로 복사된다.
- 각종 항목들을 체크를 수행하는 셸 스크립트다.
-./configure
로 수행한다.
- configure.status 셸 스크립트를 생성해낸다.
📌2. automake
- auto + make(file)으로, Makefile.in을 자동으로 만들어준다.
- 높은 이식성을 제공해준다.
- automake를 사용하려면 autoconf에게 automake를 사용한다는 것을 알려야 한다.
- configure.ac에 다음과 같은 매크로를 추가한다.
AM_INIT_AUTOMAKE(test, 0.0,1)
2-1. Makefile.am
- automake에게 어떤 일을 하는 Makefile.in 파일을 생성할지 알리는 파일이다.
- automake변수를 사용하여 프로그램 빌드, 설치, 테스트 등에 관한 골격을 잡아주면 된다.
- automake변수
접두어_주요변수명
과 같은 형식으로 되어 있다.
- 접두어는 파일을 설치할 방법과 설치될 디렉터리를 automake에게 알리는 역할을 한다.
- 예를들어, 접두어에 sbin이라고 붙으면 configure 스크립트에서 Makefile.in으로 넘기는 변수 중 sbindir 변수가 지정하는 디렉터리에 설치된다.
- 🔍ex)
sbin_PROGRAMS = test
2-2. Makefile.in
- Makefile 구조를 잡아주는 template이다.
@변수@
로 autoconf 변수를 사용한다.
- autoconf 변수는 configure.ac에 작성한 매크로 각각에 자신이 사용하는 변수가 미리 정의되어 있다.
- 🔍ex) AC_PROC_CC 매크로에 CC변수가 정의되어 있다.
- autoconf 변수는 configure 셸 스크립트의 셸 변수다.
- 파일명.in 파일의 내용을 치환하여 .in을 제거하고 파일명 파일을 생성하는 셸 스크립트다.
- Makefile.in 파일 내부에 사용된 autoco 변수를 수집한 시스템 정보로 바꾸고 Makefile을 만든다.
📌3. autoscan
- auto + scan(file)으로, configure.scan 팡링르 생성해준다.
- 현재 디렉터리를 기준으로 소스 파일과 Makefile.in, Makefile.am 파일의 내용에 기초하여 configure.scan파일을 생성한다.
- 소스 파일 내 함수 및 구조체 종류, include된 헤더 파일의 종류, 사용된 라이브러리 종류, Makefile에서 사용하는 빌드 유틸리티 종류 등이 configure.scan 파일을 생성하는 기초 자료가 된다.
- configure.scan 파일은 확장자만 .ac로 변경하면 바로 사용가능한 configure.ac가 된다.
- autoscan으로 만들어진 configure.ac파일은 체크 항목이 과할 수도 있고 부족할 수도 있어서, configure.scan 파일을 바탕으로 수정하는 것이 좋다.
- 아무런 인자 없이
autoscan
을 실행하면 된다.