打印

autotools魔鬼使用[原]

[复制链接]
159|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
石头张|  楼主 | 2018-10-3 17:36 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
呵呵!刚刚又练了一下用autotools来生成makefile,呵呵,感觉比前一次好多拉。

[root@localhost root]# mkdir -m 777 ./hello             //新建一个文件夹放源文件,其实这相当于一个项目工程文件夹

[root@localhost root]# cd hello

[root@localhost hello]# vim hello.c                //新建一个hello.c的文件,输入如下内容

#include<stdio.h>

int main(void)

{

         printf("Hello, Lammy!\n");

         return 0;

}//呵呵,简单吧

//接下来就开始使用autotools来生成Makefile

[root@localhost hello]# ls

hello.c

[root@localhost hello]# autoscan          //利用它来生成configure.in的原型文件configure.scan

[root@localhost hello]# ls                         //发现有什么不一样了没有

autoscan.log  configure.scan  hello.c

//然后修改configure.scan,并保存为configure.in

[root@localhost hello]# vim configure.scan



#                                                -*- Autoconf -*-

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

                                                                                 

AC_PREREQ(2.57)

AC_INIT(FULL-PACKAGE-NAME, VERSION, BUG-REPORT-ADDRESS)

AC_CONFIG_SRCDIR([hello.c])

AC_CONFIG_HEADER([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



//把它修改为如下:

#                                                -*- Autoconf -*-

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

                                                                                 

AC_PREREQ(2.57)

#AC_INIT(FULL-PACKAGE-NAME, VERSION, BUG-REPORT-ADDRESS)

AC_INIT(hello,1.0)

AM_INIT_AUTOMAKE(hello,1.0)

                                                                                 

AC_CONFIG_SRCDIR([hello.c])

AM_CONFIG_HEADER([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_CONFIG_FILES([Makefile])//AC_CONFIG_FILES用于生成Makefile的宏

AC_OUTPUT





//保存为configure.in,注意紫罗兰色部分,具体为什么可以看看http://seul.org/docs/autotut/,上面有关各个宏观的作用,不过是英文的

[root@localhost hello]# aclocal     //生成aclocal.m4

[root@localhost hello]# autoconf     //生成configure   

[root@localhost hello]# ls         //又多了东西

aclocal.m4       autoscan.log  configure.in     hello.c

autom4te.cache  configure      configure.scan

[root@localhost hello]# autoheader     //生成config.h.in

[root@localhost hello]# ls

aclocal.m4       autoscan.log  configure      configure.scan

autom4te.cache  config.h.in    configure.in  hello.c

//新建一个Makefile.am,它是automake的脚本,很简单

[root@localhost hello]# vim Makefile.am

//输入如下,具体什么我就不介绍啦,记住就行

AUTOMAKE_OPTIONS=foreign

bin_PRONGRAMS =hello

hello_SOURCES =hello.c

[root@localhost hello]# automake --add-missing     //生成configure.in

configure.in: installing `./install-sh'

configure.in: installing `./mkinstalldirs'

configure.in: installing `./missing'

Makefile.am: installing `./depcomp'

[root@localhost hello]# ls

aclocal.m4       config.h.in    configure.scan  install-sh    missing

autom4te.cache  configure      depcomp          Makefile.am  mkinstalldirs

autoscan.log     configure.in  hello.c          Makefile.in



[root@localhost hello]# ./configure          //生成Makefile

checking for a BSD-compatible install... /usr/bin/install -c

checking whether build environment is sane... yes

checking for gawk... gawk

checking whether make sets $(MAKE)... yes

checking for gcc... gcc

checking for C compiler default output... 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 ANSI C... 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

[root@localhost hello]# make          //编译并生成可运行的运行文件

make  all-am

make[1]: Entering directory `/root/hello'

source='hello.c' object='hello.o' libtool=no \

depfile='.deps/hello.Po' tmpdepfile='.deps/hello.TPo' \

depmode=gcc3 /bin/sh ./depcomp \

gcc -DHAVE_CONFIG_H -I. -I. -I.      -g -O2 -c `test -f 'hello.c' || echo './'`hello.c

gcc  -g -O2    -o hello  hello.o

make[1]: Leaving directory `/root/hello'

[root@localhost hello]# ls          //看到它了没有

aclocal.m4       config.log       depcomp      Makefile        stamp-h1

autom4te.cache  config.status    hello        Makefile.am

autoscan.log     configure        hello.c      Makefile.in

config.h         configure.in     hello.o      missing

config.h.in      configure.scan  install-sh  mkinstalldirs

[root@localhost hello]# ./hello     //运行下看看

Hello, Lammy!



//可以看看Makefile发现挺大的,呵呵,不管,能用就行,另外附加几个心得:

1>如果你的源文件有问题,在 make时它会有提示的,所以Makefile的生成和你的源文件正确与否没有联系,所以你修改了源文件时,只要文件名没有改,那么你可以直接从 make开始

2>AC_INIT(hello,1.0)

AM_INIT_AUTOMAKE(hello,1.0)

                                                                                 

AC_CONFIG_SRCDIR([hello.c])

AM_CONFIG_HEADER([config.h])//

这几个宏顺序别弄反啦哦

使用特权

评论回复

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

446

主题

446

帖子

0

粉丝