首 页 ┆ 源码下载 ┆ IT学院 ┆ 字体下载 ┆ 模板下载 ┆ 源码发布 ┆ 广告合作 ┆ 网站地图 ┆ 虚拟主机 ┆ 中文域名
► 设为首页
► 加入收藏
► 联系我们
源码下载 >> ASP源码 | PHP源码 | ASP.net源码 | JSP源码 | CGI源码 | VC/C++源码 | VB源码 | Delphi源码 | Flash源码
文章学院 >> 网络编程 | 网页设计 | 图形图象 | 数据库 | 服务器 | 网络媒体 | 网络安全 | 操作系统 | 办公软件 | 软件开发 | 黑客知识
字体下载 >> 精制字体 | 非英字体 | 艺术字体 | 著名字体 | 哥特式 | 简单字体 | 手写体 | 节假日 | 图案字体 | 精度像素 | 中文字体
模板下载 >> 企业门户 | 数码网络 | 休闲娱乐 | 影视音乐 | 旅游名胜 | 文化艺术 | 电子商务 | 个性展示 | 登陆导航 | Flash模板
►►您当前的位置:源码园 → IT学院 → 操作系统 → Linux → 文章内容

automake 小回顾

作者:佚名  来源:网上收集  发布时间:2006-5-22 18:20:12

现在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/DownloadFiles\sub1这个目录中的内容编成的一个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 .......

[] [返回上一页] [打 印]
  • 上一篇文章:www
  • 下一篇文章:搞Linux安全的注意了,现在有SSH的暴力破解软件

  • 相关文章:
  • 病毒快报:自由感染者感染EXE并生成AUTO病毒
  • AUTO下载者——感染U盘下载病毒
  • [组图]轻松自定义线型-AutoCAD小技巧
  • [组图]创建三维文字及拓展之AutoCAD教程
  • 用 auto_ptr 类模板帮助动态内存管理
  • [图文]如何在编辑框中使用IAutoComplete接口
  • 如何在WPS2000中插入AutoCad图形文件
  • Automount mini-Howto 文件系统自动挂载程序
  • 对光驱和软驱实现Automount
  • Linux下Makefile的automake生成全攻略
  • 好用的Linux小工具:Autofs
  • automake 小回顾
关于本站 - 网站帮助 - 广告合作 - 下载声明 - 友情连接 - 网站地图 - 源码发布
Copyright © 2003-2009 Ymyasp.Com. All Rights Reserved .
备案序号:粤ICP备07029071号