Automake的使用

进入到你的源码目录

$ cd src
$ ls
main.c
cat main.c
# 代码如下:
#include <stdio.h>

int main(int argc, char** argv){

    printf("Hello, Auto Makefile!\n");
    return 0;

}

开始使用Automake了

  • 执行autoscan
$ autoscan
$ ls
autoscan.log    configure.scan  main.c
  • 复制configure.scan为configure.ac(以前为configure.in)
$ cp configure.scan configure.ac
  • 编辑configure.ac或configure.in文件
#                                               -*- Autoconf -*-
#Process this file with autoconf to produce a configure script.
AC_PREREQ([2.69])
#包名(最终可执行文件)、版本号、联系地址
AC_INIT(main, 1.0, 1710308677@qq,com)
AC_CONFIG_SRCDIR([main.c])
AC_CONFIG_HEADERS([config.h])
#加这一行:包名、版本号与上面保持一致configure.in写法
#AM_INIT_AUTOMAKE(main,1.0)
#configure.ac写法
#加这两行行:包名、版本号与上面保持一致configure.in写法
AC_CONFIG_SRCDIR([main.c])
AM_INIT_AUTOMAKE
#Checks for programs.
AC_PROG_CC
#Checks for libraries.
#Checks for header files.
#Checks for typedefs, structures, and compiler characteristics.
#Checks for library functions.
#加这一行表示要生产的Makefile这个文件
AC_OUTPUT([Makefile])
  • 执行aclocal
$ aclocal
$ ls
aclocal.m4  autoscan.log    configure.scan
autom4te.cache  configure.in    main.c
  • 执行autoconf
$ autoconf
$ ls
aclocal.m4  autoscan.log    configure.in    main.c
autom4te.cache  configure   configure.scan
  • 执行autoheader
$ autoheader
$ ls
aclocal.m4  autoscan.log    configure   configure.scan
autom4te.cache  config.h.in configure.in    main.c
  • 创建Makefile.am文件
$ vi Makefile.am
如下:
AUTOMAKE_OPTIONS=foreign
bin_PROGRAMS=main
main_SOURCES=main.c
  • 执行automake --add-missing
$ automake --add-missing
automake: warning: autoconf input should be named 'configure.ac', not 'configure.in'
configure.in:8: warning: AM_INIT_AUTOMAKE: two- and three-arguments forms are deprecated.  For more info, see:
configure.in:8: https://www.gnu.org/software/automake/manual/automake.html#Modernize-AM_005fINIT_005fAUTOMAKE-invocation
configure.in:10: installing './compile'
configure.in:8: installing './install-sh'
configure.in:8: installing './missing'
Makefile.am: installing './depcomp'
automake: warning: autoconf input should be named 'configure.ac', not 'configure.in'
$ ls
Makefile.am autom4te.cache  config.h.in configure.scan  main.c
Makefile.in autoscan.log    configure   depcomp     missing
aclocal.m4  compile     configure.in    install-sh
  • 执行 ./configure
$ ./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... ./install-sh -c -d
checking for gawk... no
checking for mawk... no
checking for nawk... no
checking for awk... awk
checking whether make sets $(MAKE)... yes
checking whether make supports nested variables... 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 whether gcc understands -c and -o together... yes
checking whether make supports the include directive... yes (GNU style)
checking dependency style of gcc... gcc3
checking that generated files are newer than configure... done
configure: creating ./config.status
config.status: creating Makefile
config.status: creating config.h
config.status: executing depfiles commands
  • 执行make
$ make
/Applications/Xcode.app/Contents/Developer/usr/bin/make  all-am
gcc -DHAVE_CONFIG_H -I.     -g -O2 -MT main.o -MD -MP -MF .deps/main.Tpo -c -o main.o main.c
mv -f .deps/main.Tpo .deps/main.Po
gcc  -g -O2   -o main main.o  
  • 测试生成的main可执行包
$ ./main
Hello, Auto Makefile!
  • 打包压缩
$ make dist
/Applications/Xcode.app/Contents/Developer/usr/bin/make  dist-gzip am__post_remove_distdir='@:'
/Applications/Xcode.app/Contents/Developer/usr/bin/make  distdir-am
if test -d "main-1.0"; then find "main-1.0" -type d ! -perm -200 -exec chmod u+w {} ';' && rm -rf "main-1.0" || { sleep 5 && rm -rf "main-1.0"; }; else :; fi
test -d "main-1.0" || mkdir "main-1.0"
test -n "" \
    || find "main-1.0" -type d ! -perm -755 \
        -exec chmod u+rwx,go+rx {} \; -o \
      ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \
      ! -type d ! -perm -400 -exec chmod a+r {} \; -o \
      ! -type d ! -perm -444 -exec /bin/sh /Users/hqmac/Desktop/temp/install-sh -c -m a+r {} {} \; \
    || chmod -R a+r "main-1.0"
tardir=main-1.0 && ${TAR-tar} chof - "$tardir" | eval GZIP= gzip --best -c >main-1.0.tar.gz
if test -d "main-1.0"; then find "main-1.0" -type d ! -perm -200 -exec chmod u+w {} ';' && rm -rf "main-1.0" || { sleep 5 && rm -rf "main-1.0"; }; else :; fi
$ ls
Makefile    autoscan.log    config.status   install-sh  missing
Makefile.am compile     configure   main        stamp-h1
Makefile.in config.h    configure.in    main-1.0.tar.gz
aclocal.m4  config.h.in configure.scan  main.c
autom4te.cache  config.log  depcomp     main.o
  • 供别人使用
$ tar -zxvf main-1.0.tar.gz
x main-1.0/
x main-1.0/install-sh
x main-1.0/configure
x main-1.0/config.h.in
x main-1.0/depcomp
x main-1.0/missing
x main-1.0/configure.in
x main-1.0/Makefile.am
x main-1.0/._main.c
x main-1.0/main.c
x main-1.0/compile
x main-1.0/Makefile.in
x main-1.0/aclocal.m4
$ ls
main-1.0    main-1.0.tar.gz
$ cd main-1.0
$ ./configure
$ make
$ ls
Makefile    aclocal.m4  config.h.in configure   install-sh  main.o
Makefile.am compile     config.log  configure.in    main        missing
Makefile.in config.h    config.status   depcomp     main.c      stamp-h1
$ ./main
Hello, Auto Makefile!

参考

https://www.gnu.org/software/automake/manual/automake.html
https://www.gnu.org/software/automake/manual/automake.html#Modernize-AM_005fINIT_005fAUTOMAKE-invocation
https://blog.csdn.net/fd315063004/article/details/7785504
https://blog.csdn.net/lichangrui2009/article/details/54889694

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,602评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,442评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,878评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,306评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,330评论 5 373
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,071评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,382评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,006评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,512评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,965评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,094评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,732评论 4 323
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,283评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,286评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,512评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,536评论 2 354
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,828评论 2 345