autotools - Gakgu/Gakgu.github.io GitHub Wiki

개요

Makefile을 만들 수 있게 도와주는 GNU build system.

구성

  • automake
  • autoconf
  • libtool
  • 기타 보조 도구 :
    • autoscan
    • aclocal
    • autoheader

사용법

  1. Makefile.am 작성 :
    프로젝트 디렉토리에서 Makefile.am을 작성한다.

     $ vim project_dir/Makefile.am
     $ vim project_dir/src/Makefile.am
     $ ......
    
  2. configure.ac 작성 :
    configure.ac를 작성한다.

     $ autoscan
     $ mv configure.scan configure.ac
     $ vim configure.ac
    
  3. configure 생성 :
    아래에서 libtoolize는 공유 라이브러리가 있을 때에만 사용한다.

     $ aclocal
     $ autoheader
     $ libtoolize --automake --copy --force
     $ autoconf
     $ automake --foreign --add-missing --copy
    
  4. 설치

  • automake 옵션 :
    • --foreign :
      기타 표준 문서들을 작성하지 않아도 된다.

    • --add-missing :
      누락된 표준 패키지 파일을 추가시켜준다.

    • --copy :
      --add-missing과 함께 사용되며 누락된 표준 패키지 파일을 복사한다. 기본은 심볼릭 링크이다.

  1. 설치
    다음 명령어로 프로젝트를 설치한다.

     $ ./configure
     $ make
     $ make install
    
  • configure 옵션 :
    • --prefix=_DIRECTORY_ :
      지정한 디렉토리에 설치한다.

Makefile.am 문법

최상위 디렉토리의 Makefile.am

  • SUBDIRS = dir1 dir2 ... :
    지정한 디렉토리에서 Makefile.am 조사한다.

소스 디렉토리의 Makefile.am

  • bin_PROGRAMS = target :
    생성할 binary 파일의 이름을 정한다.

  • target\SOURCES = main.cpp src.cpp ...
    컴파일할 소스들을 지정한다.

라이브러리 디렉토리의 Makefile.am

  • lib_LIBRARIES = libXXX.a :
    생성할 정적 라이브러리를 지정한다.

  • libXXX_a_SOURCES = source1 source2 :
    정적 라이브러리를 구성할 소스를 지정한다.

  • lib_LTLIBRARIES = libXXX.la
    생성할 공유 라이브러리를 지정한다.

  • libXXX_la_SOURCES = source1 source2 :
    공유 라이브러리를 구성할 소스를 지정한다.

공통 Makefile.am 문법

  • target_CFLAGS = -W -Wall :
    gcc flags를 추가한다.

  • target_CPPFLAGS = -W -Wall :
    g++ flags를 추가한다.

  • target_LDADD = $(top_builddir)/lib/libXXX.X :
    라이브러리를 추가한다.

configure.ac 문법

  • AC_INIT(target, version, e-mail) :
    반드시 기입해야 하는 기본 정보이다.

  • AM_INIT_AUTOMAKE :
    automake를 사용한다.

  • AC_PROG_CC :
    gcc가 있는지 확인한다.

  • AC_PROG_CXX :
    g++이 있는지 확인한다.

  • AC_PROG_RANLIB :
    ranlib가 있는지 확인한다. 정적 라이브러리를 만들 때 필요하다.

  • AC_PROG_LIBTOOL :
    libtool이 있는지 확인한다. 공유 라이브러리를 만들 때 필요하다.