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์ด ์žˆ๋Š”์ง€ ํ™•์ธํ•œ๋‹ค. ๊ณต์œ  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋งŒ๋“ค ๋•Œ ํ•„์š”ํ•˜๋‹ค.