AutoMake 学习笔记
作者:
许振文
过程记录:
1. autoscan 2. 修改configure.scan,重命名为configure.in,编辑Makefile.am 3. 运行aclocal 4. autoconf 5. automake --add-missing 6. ./configure && make && make install了。
制作目录结构及文件:
helight@helight:myshell$ ls src helight@helight:myshell$ ls src/ myshell.c helight@helight:myshell$
接下来运行“autoscan”并且编辑相关文件:
1.将"configure.scan"重命名为"configure.in"。2.在本文件夹和子文件夹中建立Makefile.am文件。
helight@helight:myshell$ autoscan helight@helight:myshell$ ls autoscan.log configure.scan src helight@helight:myshell$ mv configure.scan configure.in helight@helight:myshell$ vim configure.in helight@helight:myshell$ vim Makefile.am helight@helight:myshell$ vim src/Makefile.am
修改后的configure.in
# -*- Autoconf -*- # Process this file with autoconf to produce a configure script. AC_PREREQ(2.61) AC_INIT("myshell", "0.01", "helight.xu@gmail.com") AC_CONFIG_SRCDIR([src/myshell.c]) AC_CONFIG_HEADER([config.h]) AM_INIT_AUTOMAKE("myshell", "0.01") # Checks for programs. AC_PROG_CC # Checks for libraries. # Checks for header files. AC_HEADER_STDC AC_HEADER_SYS_WAIT AC_CHECK_HEADERS([stdlib.h string.h unistd.h]) # Checks for typedefs, structures, and compiler characteristics. AC_TYPE_PID_T AC_TYPE_UID_T # Checks for library functions. AC_FUNC_FORK AC_FUNC_MALLOC AC_CHECK_FUNCS([memset strrchr]) AC_CONFIG_FILES(Makefile src/Makefile) AC_OUTPUT
与autoscan生成的文件相比,主要添加修改了以下几行:
AC_INIT("myshell", "0.01", "helight.xu@gmail.com") AM_INIT_AUTOMAKE("myshell", "0.01") AC_CONFIG_FILES(Makefile src/Makefile)
新建立的Makefile.am文件的内容
helight@helight:myshell$ cat Makefile.am #Makefile.am SUBDIRS = src helight@helight:myshell$
新建立的src/Makefile.am文件的内容
helight@helight:myshell$ cat src/Makefile.am #src/Makefiel.am bin_PROGRAMS = myshell myshell_SOURCES = myshell.c helight@helight:myshell$
接下来运行aclocal
此时会生成aclocal.m4和autom4te.cache。helight@helight:myshell$ aclocal helight@helight:myshell$ ls aclocal.m4 autoscan.log configure.in Makefile.am src helight@helight:myshell$
再运行:autoconf生成configure文件.
helight@helight:myshell$ autoconf helight@helight:myshell$ ls aclocal.m4 autoscan.log configure.in src autom4te.cache configure Makefile.am helight@helight:myshell$
再运行autohead 生成config.h.in
helight@helight:myshell$ autoheader helight@helight:myshell$ ls aclocal.m4 autoscan.log configure Makefile.am autom4te.cache config.h.in configure.in src helight@helight:myshell$
最后运行automake --add-missing 就能得到Makefile.in
helight@helight:myshell$ automake --add-missing configure.in: installing `./install-sh' configure.in: installing `./mkinstalldirs' configure.in: installing `./missing' Makefile.am: installing `./COPYING' Makefile.am: installing `./INSTALL' Makefile.am: required file `./NEWS' not found Makefile.am: required file `./README' not found Makefile.am: required file `./AUTHORS' not found Makefile.am: required file `./ChangeLog' not found src/Makefile.am: installing `./depcomp' helight@helight:myshell$ ls aclocal.m4 config.h.in COPYING install-sh missing autom4te.cache configure depcomp Makefile.am mkinstalldirs autoscan.log configure.in INSTALL Makefile.in src helight@helight:myshell$这里可以看到提示缺少一些文件。但这些文件是可以不要的。
可以configure了
helight@helight:myshell$ ./configure checking for a BSD-compatible install... /usr/bin/install -c checking whether build environment is sane... yes checking for gawk... no checking for mawk... mawk checking whether make sets $(MAKE)... yes checking for gcc... gcc checking for C compiler default output file name... a.out checking whether the C compiler works... yes checking whether we are cross compiling... no checking for suffix of executables... checking for suffix of object files... o checking whether we are using the GNU C compiler... yes checking whether gcc accepts -g... yes checking for gcc option to accept ISO C89... none needed checking for style of include used by make... GNU checking dependency style of gcc... gcc3 checking how to run the C preprocessor... gcc -E checking for grep that handles long lines and -e... /bin/grep checking for egrep... /bin/grep -E checking for ANSI C header files... yes checking for sys/wait.h that is POSIX.1 compatible... yes checking for sys/types.h... yes checking for sys/stat.h... yes checking for stdlib.h... yes checking for string.h... yes checking for memory.h... yes checking for strings.h... yes checking for inttypes.h... yes checking for stdint.h... yes checking for unistd.h... yes checking for stdlib.h... (cached) yes checking for string.h... (cached) yes checking for unistd.h... (cached) yes checking for pid_t... yes checking for uid_t in sys/types.h... yes checking vfork.h usability... no checking vfork.h presence... no checking for vfork.h... no checking for fork... yes checking for vfork... yes checking for working fork... yes checking for working vfork... (cached) yes checking for stdlib.h... (cached) yes checking for GNU libc compatible malloc... yes checking for memset... yes checking for strrchr... yes configure: creating ./config.status config.status: creating Makefile config.status: creating src/Makefile config.status: creating config.h config.status: executing depfiles commands helight@helight:myshell$
编译make
helight@helight:myshell$ make