- 先建立程式碼,並在對應目錄內先寫好 Makefile.am
- 執行 autoscan 生成 configure.scan, 複製成 configure.ac 並進行修改
- 執行 aclocal 命令。掃描 configure.ac 檔案生成 aclocal.m4 檔案。
- 執行 autoheader 命令。該命令生成 config.h.in 檔案。
- touch NEWS README AUTHORS ChangeLog
NEWS README AUTHORS ChangeLog:
這些檔案是GNU軟體的標配,不過在專案中不一定需要加入。
如果專案中沒有這些檔案,每次autoreconf會提示缺少檔案,不過這並不影響。
- 執行 automake -a -c -f 該命令生成 Makefile.in 檔案。
- 執行 autoconf 命令。這個命令將 configure.ac 檔案中的巨集展開,生成 configure 指令碼。
- 執行 ./congigure 命令。將Makefile.in命令生成Makefile檔案,開始編譯
$ ./configure --prefix=`pwd`/../test
$ make
$ make install
- 若再次修改 configure.ac,則需要重複下列步驟
$ aclocal
$ autoheader
$ automake -a -c -f
$ autoconf
2. 實際測試步驟整理如下
a. 先安裝 autotool
$ sudo apt install autotools-dev m4 autoconf
$ sudo apt install autoconf-archive gnu-standards autoconf-doc libtool
b. 假設原始目錄架構如下~/test/autotool_test$ tree
.
├── inc
│ └── liba.h
├── src
│ └── liba.c
└── test
└── test.c
c. 在對應目錄內先寫好 Makefile.amMakefile.amSUBDIRS = src testsrc/Makefile.amAM_CFLAGS = -I../inctest/Makefile.am
liba_LIBRARIES = liba.a
liba_a_SOURCES = liba.c liba.h
include_HEADERS = ../include/liba.hLDADD = ../libs/liba.a
AM_CFLAGS = -I../inc
bin_PROGRAMS = test
test_SOURCES = test.c
d. 按照上述操作步驟生成 configure.ac, 修改後的檔案如下AC_PREREQ([2.69])
AC_INIT(mytest, 1.0.0, alb423@gmail.com)
AM_INIT_AUTOMAKE
AC_CONFIG_SRCDIR([src/liba.c])
AC_CONFIG_HEADERS([config.h])
AC_PROG_CC
AC_PROG_RANLIB
AC_CONFIG_FILES([Makefile
src/Makefile
test/Makefile])
AC_OUTPUT
e. 後續按照上述操作步驟執行即可。
參考資料
- https://www.slideshare.net/zzz00072/gnu-make-autotools-cmake
- https://slidesplayer.com/slide/15153334/
- https://www.lrde.epita.fr/~adl/autotools.html