automake 小回顾

2016-01-29 18:12 6 1 收藏

automake 小回顾,automake 小回顾

【 tulaoshi.com - Linux 】


现在google Makefile 和 automake就能找到一些文章。以一个Hello 程序描述为一个project生成Makefile的过程。
这个例子其实在 Info automake 里能看到。大家把它翻成中文的,不错。
但实际上按照这个例子来做的话,步骤都对,就是太简单,一些常用的设置需要写进去,但是没有提到,还是要自己info , google ,try .
下面是我对Automake一个小总结。
现在google Makefile 和 automake就能找到一些文章。以一个Hello 程序描述为一个project生成Makefile的过程。
这个例子其实在 Info automake 里能看到。大家把它翻成中文的,不错。
但实际上按照这个例子来做的话,步骤都对,就是太简单,一些常用的设置需要写进去,但是没有提到,还是要自己info , google ,try .
下面是我对Automake一个小总结。
1 步骤总述
(1) autoscan 生成configure.scan .
(2) 在configure.scan基础上手动编辑,主要要添加的 :
AM_INIT_AUTOMAKE(myprojectname , version)
AC_OUTPUT( 最后要生成的Makefile , 包括 子目录中的,中间用空格隔开) , 例如 AC_OUTPUT(Makefile subdir/Makefile
subdir1/Makefile) AC_PROG_RANLIB (意义见第四条末尾)
(3) aclocal
autoconf
生成configure脚本。
(4) 这步我基本靠手,呵呵,有没有脚本来完成这个的?就是在每个最后需要生成Makefile的目录中,写一个Makefile.am .
最上层的要写明
AUTOMAKE_OPTIONS = foreign 如果这个目录没有要编译的文件 ,只包含了子目录,则只写个

SUBDIRS = dir1 就ok了。 例如我的工程,最上层只是包含了源码目录,于是就写了 AUTOMAKE_OPTIONS=foreign SUBDIRS=src
如果有文件要编译,则要指明target 先。比如我的src目录底下既有文件,又有目录,而src的这层目录中的文件最后是要编译成一个
可执行文件,则src目录下的Makefile.am这么写。
bin_PROGRAMS= myprogram SUBDIRS= sub1
myprogram_SOURCES= a.cpp b.cpp # 要编译的源文件。这儿的_SOURCES是关键字 EXTRA_DIST= a.h b.h # 不用编成.o,但生成target myprogram也需要给编译器处理的头文件放这里
myprogram_LDADD = libsub1.a 这个_LDADD是关键字, # 最后生成myprogram这个执行文件,还要link src/DownloadFilessub1这个目录中的内容编成的一个lib :libsub1.a, myprogram_LDFLAGS = -lpthread -lglib-2.0 -L/usr/bin $(all_libraries) # myprogram还要link系统中的动态so,以此类推,需要连自编译的so,也写到这个关键字 _LDFLAGS后面就好了。 AM_CXXFLAGS = -D_LINUX # 传递给g++编译器的一些编译宏定义,选项,
INCLUDES=-IPassport -Isub1/ -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include $(all_includes) # 传递给编译器的头文件路径。
下面是sub1种生成lib的Makefile.am
noinst_LIBRARIES = libprotocol.a # 不是生成可执行文件,而是静态库,target用noinst_LIBRARIES libprotocol_a_SOURCES = alib.cpp EXTRA_DIST = mylib.h alib.h INCLUDES= -I../ $(all_includes) AM_CXXFLAGS = -D_LINUX -DONLY_EPOLL -D_SERVER
ok ,最后补上AC_PROG_RANLIB涵义,如果要自己生成lib,然后link到最终的可执行文件中,则要加上这个宏,否则不用。
2 一点讨论 每个目录至少都要有一个target,或者是可执行文件或者是lib,似乎对目录的划分带来点局限。 比如我的目录结构如果是这样 ./Src ./Src/sub1 ./Src/sub2 而我想这样,sub1,sub2都没有target,目录划分只是为了区别代码的不同模块,然后把两个目录中编译出的中间文件一起link ,得到最后需要的 myprogram 。 似乎在Src/Makefile.am中要这么写 myprogram_SOURCES = sub1/a.cpp sub2/b.cpp 可以实现,但我没试,:P
当然和设成先编译出libsub1.a libsub2.a 最后Link得到myprogram 没有本质区别了。
3 剩下的就是 automake --add-missing Ok , Makefile.in应该放到各个目录下了。
最后,运行configure脚本,生成 各个目录下的Makefile .......再最后 ,make .......

来源:https://www.tulaoshi.com/n/20160129/1504819.html

延伸阅读
《阿尔法协议》战BOSS的回顾 原本想写个剧情探讨的 后来觉得自己也没玩懂 于是蛋疼地回顾一下自己搞过的boss进度大概百分之50左右 boss指的就是 有显示血条和名字的人物 有的可以秒掉 有的难以避免地要正面交手。 按照自己的人物顺序 中东地区: 1. 肌肉默罕默德,(原谅我 几乎记不住名字) 中东区域收尾时候的任务的肌肉大哥,可惜这哥们...
2013最佳新娘婚纱造型回顾   无论身披Monique Lhuillier或是Vera Wang等大牌婚纱,还是选择别具新意的设计师品牌作品,回顾2013,有太多值得借鉴的完美新娘婚纱造型。 Pronovias单肩礼服肩部夸张别致的褶皱设计衬托新娘气质,拖尾裙摆采用质感面料与现代感剪裁结合。 灵感来自超模凯特-莫斯的英式乡村婚礼,精致的蕾...
《撼天神塔 Brandish》系列回顾     3月19号Brandish的复刻作品就要发售了,不过和伊苏、英雄传说这两部当今F社的当家作品相比,Brandish可以说了解的人就不多了,所在发售前,先让我带着大家对该系列进行一下小小的回顾吧。 Brandish (也就是本次在PSP上复刻的作品)     Brandish初代发售于1991年,制...
标签: Android
2013年Android系统设备大回顾   科技媒体Android Authority的撰稿人奈特斯旺纳(Nate Swanner)撰文回顾了2013年引人注目的Android设备,并对2014年进行了展望。他提到的设备包括手机、智能手表、平板电脑、游戏机、电视棒,当然还有谷歌眼镜。以下就是全文摘要: 跟之前几年相比,2013年Android设备的种类增多了。一方面,高通Sn...
线程是操作系统运行的基本单位,它被封装在进程中,一个进程可以包含多个线程。即使我们不手动创造线程,进程也会有一个默认的线程在运行。 对于JVM来说,当我们编写一个单线程的程序去运行时,JVM中也是有至少两个线程在运行,一个是我们创建的程序,一个是垃圾回收。 线程基本信息 我们可以通过Thread.currentThread()方法获取当前线程...

经验教程

813

收藏

24

精华推荐

《刺客信条:启示录》全剧情回顾

《刺客信条:启示录》全剧情回顾

半梦半醒_FU2K

回顾2019年度12款最漂亮iOS应用

回顾2019年度12款最漂亮iOS应用

不怨之心农场

基于Java回顾之I/O的使用详解

基于Java回顾之I/O的使用详解

Charm丶Austin

热门标签

微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部