红联Linux门户
Linux帮助

新手提问:关于autotools

发布时间:2011-07-13 12:01:51来源:红联作者:jayee
我在用autotools的工具生成makefile文件,在/root/chap-2/autotools文件夹下有2.7.main.c和2.7.avg.c两个文件
其中2.7.main.c内容:
/*---------------------------------------------------------------------------------------------*/
#include
float avg(int var[],int num);
int main()
{
int n,i;
float average;
printf("请输入需要计算的整数个数:");
scanf("%d",&n);
int array[n];
for(i=0;i {
printf("请输入第%d个整数:",i+1);
scanf("%d",&array[i]);
}
average=avg(array,n);
printf("所有%d个整数的平均值是:%6.2f\n",n,average);
}
/*----------------------------------------------------------------------------------------------*/
2.7.avg.c内容:
/*----------------------------------------------------------------------------------------------*/
float avg(int var[],int num)
{
float avrg=0.0;
int i;
for(i=0;i {
avrg+=var[i];
}
avrg/=num;
return (avrg);
}
/*----------------------------------------------------------------------------------------------*/
使用命令root@ubuntu:/root/chap-2/autotools# autoscan生成的configure.scan文件的内容如下:
/*----------------------------------------------------------------------------------------------*/
# -*- Autoconf -*-
# Process this file with autoconf to produce a configure script.

AC_PREREQ([2.67])
AC_INIT([FULL-PACKAGE-NAME], [VERSION], [BUG-REPORT-ADDRESS])
AC_CONFIG_SRCDIR([2.7.avg.c])
AC_CONFIG_HEADERS([config.h])

# Checks for programs.
AC_PROG_CC

# Checks for libraries.

# Checks for header files.

# Checks for typedefs, structures, and compiler characteristics.

# Checks for library functions.

AC_OUTPUT
~
"configure.scan" 20L, 469C
/*-----------------------------------------------------------------------------------------*/
在configure.scan中的AC_CONFIG_SRCDIR([2.7.avg.c])中括号内为什么是2.7.avg.c而不是2.7.main.c呢?求高手指教
P.S.:这是在虚拟机中操作的
文章评论

共有 3 条评论

  1. jayee 于 2011-07-13 14:56:32发表:

    以我自己为例子也写一下我遇到的问题:
    1.编写程序2.7.avg.c 2.7.main.c
    /*-------------------------2.7.avg.c----------------------------*/
    float avg(int var[],int num)
    {
    float avrg=0.0;
    int i;
    for(i=0;i {
    avrg+=var[i];
    }
    avrg/=num;
    return (avrg);
    }
    /*-----------------------------------------------------------*/
    /*-------------------------2.7.main.c----------------------------*/
    #include "stdio.h"
    float avg(int var[],int num);
    int main()
    {
    int n,i;
    float average;
    printf("请输入需要计算的整数个数:");
    scanf("%d",&n);
    int array[n];
    for(i=0;i {
    printf("请输入第%d个整数:",i+1);
    scanf("%d",&array[i]);
    }
    average=avg(array,n);
    printf("所有%d个整数的平均值是:%6.2f\n",n,average);
    }
    /*-----------------------------------------------------------*/

    2.# autoscan
    #vim configure.scan // 查看并修改内容
    /*-----------------------configure.scan------------------------------------*/
    # Process this file with autoconf to produce a configure script.

    AC_PREREQ([2.67])
    AC_INIT([FULL-PACKAGE-NAME], [VERSION], [BUG-REPORT-ADDRESS]) //开头没#
    AC_CONFIG_SRCDIR([2.7.avg.c])
    AC_CONFIG_HEADERS([config.h])

    # Checks for programs.
    AC_PROG_CC

    # Checks for libraries.

    # Checks for header files.

    # Checks for typedefs, structures, and compiler characteristics.

    # Checks for library functions.

    AC_OUTPUT
    /*--------------------------------------------------------------------------*/
    //修改内容
    /*----------------------configure.scan--------------------------------*/ //修改后的内容

    AC_PREREQ([2.67])
    #AC_INIT([FULL-PACKAGE-NAME], [VERSION], [BUG-REPORT-ADDRESS]) //开头增加#
    AC_INIT(2_7,1.0) //最后可执行文件名,版本
    AM_INIT_AUTOMAKE(2_7,1.0) //增加此行
    AC_CONFIG_SRCDIR([2.7.avg.c])
    AM_CONFIG_HEADER([config.h]) //C改为M,原来HEADERS的S去掉

    # Checks for programs.
    AC_PROG_CC

    # Checks for libraries.

    # Checks for header files.

    # Checks for typedefs, structures, and compiler characteristics.

    # Checks for library functions.

    AC_CONFIG_FILES([makefile]) //增加此行
    AC_OUTPUT
    /*--------------------------------------------------------------------------*/

    3.#mv configure.scan configure.in //将configure.scan改为configure.in

    4.#aclocal
    # ls
    2.7.avg.c 2.7.main.c aclocal.m4 autom4te.cache autoscan.log configure.in

    5#autoconf
    # ls
    2.7.avg.c aclocal.m4 autoscan.log configure.in
    2.7.main.c autom4te.cache configure
    6.#autoheader
    # ls
    2.7.avg.c aclocal.m4 autoscan.log configure2.7.main.c autom4te.cache config.h.in configure.in

    7.#vim makefile.am //写makefile.am
    /*-------------------------makefile.am--------------------------*/
    AUTOMAKE_OPTIONS=foreign
    bin_PROGRAMS=2_7
    2_7_SOURCES=2.7.main.c 2.7.avg.c
    /*-------------------------------------------------------------------*/

    8.#automake -a
    configure.in:7: installing `./install-sh'
    configure.in:7: installing `./missing'
    makefile.am: installing `./depcomp'
    # ls
    2.7.avg.c autom4te.cache configure install-sh missing2.7.main.c autoscan.log configure.in makefile.am
    aclocal.m4 config.h.in depcomp makefile.in

    9.#./configure
    checking for a BSD-compatible install... /usr/bin/install -c
    checking whether build environment is sane... yes
    checking for a thread-safe mkdir -p... /bin/mkdir -p
    checking for gawk... no
    checking for mawk... mawk
    checking whether make sets $(MAKE)... yes
    checking for gcc... gcc
    checking whether the C compiler works... yes
    checking for C compiler default output file name... a.out
    checking for suffix of executables...
    checking whether we are cross compiling... no
    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
    configure: creating ./config.status
    config.status: creating makefile
    config.status: creating config.h
    config.status: executing depfiles commands
    # ls
    2.7.avg.c autoscan.log config.status install-sh missing2.7.main.c config.h configure makefile stamp-h1
    aclocal.m4 config.h.in configure.in makefile.am
    autom4te.cache config.log depcomp makefile.in

    10.#make
    make all-am
    make[1]: Entering directory `/root/chap-2/autotools'
    gcc -DHAVE_CONFIG_H -I. -g -O2 -MT 2.7.main.o -MD -MP -MF .deps/2.7.main.Tpo -c -o 2.7.main.o 2.7.main.c
    2.7.main.c: In function ‘main’:
    2.7.main.c:8:7: warning: ignoring return value of ‘scanf’, declared with attribute warn_unused_result
    2.7.main.c:13:11: warning: ignoring return value of ‘scanf’, declared with attribute warn_unused_result
    mv -f .deps/2.7.main.Tpo .deps/2.7.main.Po
    gcc -DHAVE_CONFIG_H -I. -g -O2 -MT 2.7.avg.o -MD -MP -MF .deps/2.7.avg.Tpo -c -o 2.7.avg.o 2.7.avg.c
    mv -f .deps/2.7.avg.Tpo .deps/2.7.avg.Po
    gcc -g -O2 -o 2_7 2.7.main.o 2.7.avg.o
    make[1]: Leaving directory `/root/chap-2/autotools'
    # ls
    2_7 2.7.main.o config.h configure makefile stamp-h1
    2.7.avg.c aclocal.m4 config.h.in configure.in makefile.am
    2.7.avg.o autom4te.cache config.log depcomp makefile.in
    2.7.main.c autoscan.log config.status install-sh missing
    11.#./2_7
    请输入需要计算的整数个数:4
    请输入第1个整数:5
    请输入第2个整数:3
    请输入第3个整数:26
    请输入第4个整数:6
    所有4个整数的平均值是: 10.00

  2. jayee 于 2011-07-13 13:57:19发表:

    解决,下面一段是应用另一个帖子的,如下:
    1. 比如编写程序 2_5fun_avg.c ,2_5fun_sum.c,2_5main.c 和 chengji.h
    #########################
    ####2_5fun_avg.c #######
    float fun_avg(int var[],int num)
    {
    float avrg=0.0;
    int i;
    for(i=0;iavrg+=var;
    avrg/=num;
    return (avrg);
    }

    ####2_5fun_sum.c#######
    float fun_sum(int var[],int num)
    {
    float avrg=0.0;
    int i;
    for(i=0;iavrg+=var;
    return (avrg);
    }

    ####2_5main.c#######
    #include
    #include "chengji.h"
    int main()
    {
    int n,i;
    float avg,sum;
    printf("请输入需要统计的学生数:");
    scanf("%d",&n);
    int array[n];
    for( i=0;i{
    printf("请输入第%d学生的成绩:",i+1);
    scanf("%d",&array);
    }
    sum=fun_sum(array,n);
    printf("所有的%d个学生的总成绩是: %6.2f\n",n,sum);
    avg=fun_avg(array,n);
    printf("输入的%d个学生的平均成绩是: %6.2f\n",n,avg);
    return 0;
    }
    ####chengji.h#######
    float fun_sum(int var[],int num);
    float fun_avg(int var[],int num);
    ##############################

    2.写makefile.am
    $vi makefile.am
    #####################
    AUTOMAKE_OPTIONS=foreign
    bin_PROGRAMS=2_5 //最后可执行文件名称
    2_5_SOURCES=2_5fun_avg.c 2_5fun_sum.c 2_5main.c //程序
    ########################

    3.$autoscan
    ##############################
    # -*- Autoconf -*-
    # Process this file with autoconf to produce a configure script.

    AC_PREREQ(2.61)
    #AC_INIT(FULL-PACKAGE-NAME, VERSION, BUG-REPORT-ADDRESS)
    AC_INIT(main,1.0) //最后可执行文件名称,版本
    AM_INIT_AUTOMAKE(main,1.0) //增加这一行
    AC_CONFIG_SRCDIR([avg.c])
    AM_CONFIG_HEADER([config.h]) //C改为M

    # Checks for programs.
    AC_PROG_CC

    # Checks for libraries.

    # Checks for header files.

    # Checks for typedefs, structures, and compiler characteristics.

    # Checks for library functions.

    AC_CONFIG_FILES([makefile]) //
    AC_OUTPUT

    # -*- Autoconf -*-
    # Process this file with autoconf to produce a configure script.

    AC_PREREQ(2.61)
    #AC_INIT(FULL-PACKAGE-NAME, VERSION, BUG-REPORT-ADDRESS)
    AC_INIT(2_5,1.0) //最后可执行文件名称,版本
    AM_INIT_AUTOMAKE(2_5,1.0) //增加这一行
    AC_CONFIG_SRCDIR([chengji.h])
    AC_CONFIG_HEADER([config.h]) //AC_改为AM_,我没改也成功

    # Checks for programs.
    AC_PROG_CC

    # Checks for libraries.

    # Checks for header files.

    # Checks for typedefs, structures, and compiler characteristics.

    # Checks for library functions.

    AC_CONFIG_FILES([makefile])
    AC_OUTPUT

    ################################################################################

    4.$aclocal

    5.$autoconf

    6.$autoheader

    7.$automake -a
    不行就 再执行一次

    8. $./configure
    9. $make
    10. $./2_5

  3. andy890815 于 2011-07-13 13:42:42发表:

    等待高手指教!!!