学习autotools

来源:互联网 发布:c4d r18 for mac迅雷 编辑:程序博客网 时间:2024/06/05 08:17
 1、准备:
     需要工具autoscan aclocal autoheader automake autoconf make 等工具.
  2、测试程序编写:
     建立目录:mkdir include src
     编写程序:include/str.h
  1. #include <stdio.h>
  2. int str(char *string);


      编写程序:src/str.c
   
  1. #include "str.h"
  2. //print string
  3. int str(char *string){
  4.         printf("\n----PRINT STRING----\n\"%s\"\n",string);
  5.         return 0;
  6. }

  7. //interface of this program
  8. int main(int argc , char **argv){
  9.         char str_read[1024];
  10.         printf("Please INPUT something end by [ENTER]\n");
  11.         scanf("%s",str_read);
  12.         return str(str_read );
  13. }


  3、生成configure.ac
    configure.ac是automake的输入文件,所以必须先生成该文件。
    执行命令:
  1. [root@localhost str]# ls
  2. include  src
  3. [root@localhost str]# autoscan
  4. autom4te: configure.ac: no such file or directory
  5. autoscan: /usr/bin/autom4te failed with exit status: 1
  6. [root@localhost str]# ls
  7. autoscan.log  configure.scan  include  src
  8. [root@localhost str]# cp configure.scan configure.ac


    修改 configure.ac
  1. #                                               -*- Autoconf -*-
  2. # Process this file with autoconf to produce a configure script.

  3. AC_PREREQ(2.59)
  4. AC_INIT(FULL-PACKAGE-NAME, VERSION, BUG-REPORT-ADDRESS)
  5. AC_CONFIG_SRCDIR([include/str.h])
  6. AC_CONFIG_HEADER([config.h])

  7. # Checks for programs.
  8. AC_PROG_CC

  9. # Checks for libraries.

  10. # Checks for header files.

  11. # Checks for typedefs, structures, and compiler characteristics.

  12. # Checks for library functions.
  13. AC_OUTPUT


     修改
  1. AC_INIT(FULL-PACKAGE-NAME, VERSION, BUG-REPORT-ADDRESS)


      为
  1. AC_INIT(str,0.0.1, [bug@sounos.org])



FULL-PACKAGE-NAME 为程序名称,VERSION为当前版本, BUG-REPORT-ADDRESS为bug汇报地址
    添加AM_INIT_AUTOMAKE
    添加AC_CONFIG_FILES([Makefile])
  1. #                                               -*- Autoconf -*-
  2. # Process this file with autoconf to produce a configure script.

  3. AC_PREREQ(2.59)
  4. #AC_INIT(FULL-PACKAGE-NAME, VERSION, BUG-REPORT-ADDRESS)
  5. AC_INIT(str, 0.0.1, [bug@sounos.org])
  6. AM_INIT_AUTOMAKE
  7. AC_CONFIG_SRCDIR([include/str.h])
  8. AC_CONFIG_HEADER([config.h])

  9. # Checks for programs.
  10. AC_PROG_CC

  11. # Checks for libraries.

  12. # Checks for header files.

  13. # Checks for typedefs, structures, and compiler characteristics.

  14. # Checks for library functions.
  15. AC_CONFIG_FILES([Makefile])
  16. AC_OUTPUT


4、执行aclocal
  1. [root@localhost str]# aclocal
  2. /usr/share/aclocal/libfame.m4:6: warning: underquoted definition of AM_PATH_LIBFAME
  3.   run info '(automake)Extending aclocal'
  4.   or see http://sources.redhat.com/automake/automake.html#Extending-aclocal


5、制作Makefile.am
  1. [root@localhost str]# cat Makefile.am
  2. #Makefile.am
  3. bin_PROGRAMS    = str
  4. str_SOURCES     = include/str.h src/str.c
  5. str_CPPFLAGS    = -I include/


6、autoheader
  1. [root@localhost str]# autoheader


7、automake必须文件:
  1.     *  install-sh
  2.     * missing
  3.     * INSTALL
  4.     * NEWS
  5.     * README
  6.     * AUTHORS
  7.     * ChangeLog
  8.     * COPYING
  9.     * depcomp


其中
  1.     * install-sh
  2.     * missing
  3.     * INSTALL
  4.     * COPYING
  5.     * depcomp


可以通过automake -a选项自动生成,所以这里只需要建立如下文件
  1. [root@localhost str]# touch NEWS README AUTHORS ChangeLog


8、执行automake
  1. [root@localhost str]# automake -a
  2. configure.ac: installing `./install-sh'
  3. configure.ac: installing `./missing'
  4. Makefile.am: installing `./INSTALL'
  5. Makefile.am: installing `./COPYING'
  6. Makefile.am: installing `./compile'
  7. Makefile.am: installing `./depcomp'


9、autoconf
  1. [root@localhost str]# autoconf
  2. [root@localhost str]# ls
  3. aclocal.m4      autoscan.log  config.h.in   configure.scan  include     Makefile.am  NEWS
  4. AUTHORS         ChangeLog     configure     COPYING         INSTALL     Makefile.in  README
  5. autom4te.cache  compile       configure.ac  depcomp         install-sh  missing      src


10、执行测试:
      执行./configure
  1. [root@localhost str]# ./configure --prefix=/u
  2. checking for a BSD-compatible install... /usr/bin/install -c
  3. checking whether build environment is sane... yes
  4. checking for gawk... gawk
  5. checking whether make sets $(MAKE)... yes
  6. checking for gcc... gcc
  7. checking for C compiler default output file name... a.out
  8. checking whether the C compiler works... yes
  9. checking whether we are cross compiling... no
  10. checking for suffix of executables...
  11. checking for suffix of object files... o
  12. checking whether we are using the GNU C compiler... yes
  13. checking whether gcc accepts -g... yes
  14. checking for gcc option to accept ANSI C... none needed
  15. checking for style of include used by make... GNU
  16. checking dependency style of gcc... gcc3
  17. configure: creating ./config.status
  18. config.status: creating Makefile
  19. config.status: creating config.h
  20. config.status: config.h is unchanged
  21. config.status: executing depfiles commands

       执行 make
  1. [root@localhost str]# make
  2. make  all-am
  3. make[1]: Entering directory `/data/devel/c/str'
  4. if gcc -DHAVE_CONFIG_H -I. -I. -I.  -I include/   -g -O2 -MT str-str.o -MD -MP -MF ".deps/str-str.Tpo" -c -o str-str.o `test -f 'src/str.c' || echo './'`src/str.c; \
  5. then mv -f ".deps/str-str.Tpo" ".deps/str-str.Po"; else rm -f ".deps/str-str.Tpo"; exit 1; fi
  6. gcc  -g -O2   -o str  str-str.o
  7. make[1]: Leaving directory `/data/devel/c/str'

         执行 make install
  1. [root@localhost str]# make install
  2. make[1]: Entering directory `/data/devel/c/str'
  3. test -z "/u/bin" || mkdir -p -- "/u/bin"
  4.   /usr/bin/install -c 'str' '/u/bin/str'
  5. make[1]: Nothing to be done for `install-data-am'.
  6. make[1]: Leaving directory `/data/devel/c/str'     

11、测试程序:
  1. [root@localhost str]# /u/bin/str
  2. Please INPUT something end by [ENTER]
  3. abcksdhfklsdklfdjlkfd

  4. ----PRINT STRING----
  5. "abcksdhfklsdklfdjlkfd"

结束语:这只是一个小例子,如果要把这个用得很好需要不断的磨练。。。。呵呵,见笑了。




转载自:http://bbs.chinaunix.net/thread-727270-1-1.html

原创粉丝点击