本文介紹了在 linux 系統中,通過 Gnu autoconf 和 automake 生成 Makefile 的方法。主要探討了生成 Makefile 的來龍去脈及其機理,接著具體介紹了配置 Configure.in 的方法及其規則。引子 無論是在Linux還是在Unix環境中,make都是一個非常重要的編譯命令。不管是自己進行項目開發還是安裝應用軟件,我們都經常要用到make或 make install。利用make工具,我們可以將大型的開發項目分解成為多個更易于治理的模塊,對于一個包括幾百個源文件的應用程序,使用make和 makefile工具就可以輕而易舉的理順各個源文件之間紛繁復雜的相互關系。 但是假如通過查閱make的幫助文檔來手工編寫Makefile,對任何程序員都是一場挑戰。幸而有GNU 提供的Autoconf及Automake這兩套工具使得編寫makefile不再是一個難題。 本文將介紹如何利用 GNU Autoconf 及 Automake 這兩套工具來協助我們自動產生 Makefile文件,并且讓開發出來的軟件可以像大多數模擬需求假設源文件按如下目錄存放,如圖1所示,運用autoconf和automake生成makefile文件。
 
  
 # Process this file with autoconf to prodUCe a configure script.AC_PREREQ(2.59)AC_INIT(FULL-PACKAGE-NAME, VERSION, BUG-REPORT-ADDRESS)AC_CONFIG_SRCDIR([config.h.in])AC_CONFIG_HEADER([config.h])# Checks for programs.AC_PROG_CC# Checks for libraries.# FIXME: Replace `main' with a function in `-lpthread':AC_CHECK_LIB([pthread], [main])# Checks for header files.# Checks for typedefs, structures, and compiler characteristics.# Checks for library functions.AC_OUTPUT            AC_INIT 測試程序 測試函數庫 測試頭文件 測試類型定義 測試結構 測試編譯器特性 測試庫函數 測試系統調用AC_OUTPUT            $mv configure.scan configure.in$vim configure.in              #                                -*- Autoconf -*-# Process this file with autoconf to produce a configure script.AC_PREREQ(2.59)AC_INIT(test, 1.0, normalnotebook@126.com)AC_CONFIG_SRCDIR([src/ModuleA/apple/core/test.c])AM_CONFIG_HEADER(config.h)AM_INIT_AUTOMAKE(test,1.0)# Checks for programs.AC_PROG_CC# Checks for libraries.# FIXME: Replace `main' with a function in `-lpthread':AC_CHECK_LIB([pthread], [pthread_rwlock_init])AC_PROG_RANLIB# Checks for header files.# Checks for typedefs, structures, and compiler characteristics.# Checks for library functions.AC_OUTPUT([Makefile  src/lib/Makefile  src/ModuleA/apple/core/Makefile  src/ModuleA/apple/shell/Makefile  ])               
  
  
  
 SUBDIRS=src/lib src/ModuleA/apple/shell src/ModuleA/apple/core CURRENTPATH=$(shell /bin/pwd)INCLUDES=-I$(CURRENTPATH)/src/include -I$(CURRENTPATH)/src/ModuleA/apple/include eXPort INCLUDES            noinst_LIBRARIES=libswap.alibswap_a_SOURCES=swap.cINCLUDES=-I$(top_srcdir)/src/includ            bin_LIBRARIES=libswap.alibswap_a_SOURCES=swap.cINCLUDES=-I$(top_srcdir)/src/includeswapincludedir=$(includedir)/swapswapinclude_HEADERS=$(top_srcdir)/src/include/swap.h            noinst_PROGRAMS=testtest_SOURCES=test.c test_LDADD=$(top_srcdir)/src/ModuleA/apple/shell/apple.o $(top_srcdir)/src/lib/libswap.a test_LDFLAGS=-D_GNU_SOURCEDEFS+=-D_GNU_SOURCE#LIBS=-lpthread            noinst_PROGRAMS=appleapple_SOURCES=apple.cDEFS+=-D_GNU_SOURCE            …….clean-noinstPROGRAMS: -test -z "$(noinst_PROGRAMS)"  rm -f $(noinst_PROGRAMS)apple$(EXEEXT): $(apple_OBJECTS) $(apple_DEPENDENCIES)  @rm -f apple$(EXEEXT)#$(LINK) $(apple_LDFLAGS) $(apple_OBJECTS) $(apple_LDADD) $(LIBS)…….            新聞熱點
疑難解答