AutoMake使用小结

 AutoMake使用小结

1.产生源代码
2.用autoscan产生configure.scan文件,编辑该文件产生新文件configure.in文件
3.执行aclocal,产生aclocal.m4
4.执行autoconf,产生configure
5.创建Makefile.am文件,并编辑成一定的样子
6.执行automake --add-missing, Automake会根据Makefile.am产生一些文件,其中包括最重要的Makefile.in
7.最后执行./configure,产生Makefile文档
8.执行make,生成可执行文件
  执行make install,将可执行文件复制到系统路径下。

现在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/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. 剩下的就是 automake --add-missing Ok , Makefile.in应该放到各个目录下了。

Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=547235
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
automake使用主要包括以下几个步骤: 1. 运行autoscan命令,生成configure.scan文件。这个文件可以作为configure.in文件的基础。 2. 将configure.scan文件重命名为configure.in,并对其进行修改,添加项目的配置信息。 3. 运行aclocal命令,生成aclocal.m4文件。aclocal.m4是一个宏定义文件,其中包含了用于自动配置的宏定义。 4. 运行autoconf命令,生成configure文件。configure文件是用于根据系统环境生成Makefile的脚本。 5. 新建Makefile.am文件,并在其中定义项目的编译规则和依赖关系。同时,还需要新建NEWS、README、ChangeLog、AUTHORS等文件。 6. 修改Makefile.am,并运行automake命令(可以使用automake -a或automake --add-missing),生成Makefile.in文件。 7. 运行./configure脚本,根据系统环境生成最终的Makefile文件。 8. 最后,执行make命令编译项目。 需要注意的是,configure.in和Makefile.am文件需要手动修改,以适应项目的具体需求。此外,automake还支持在不同的目录下运行configure脚本,以实现源代码目录和编译目录的分离。可以参考GNU相关文档的VPATH章节获取更多信息。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [automake使用](https://blog.csdn.net/lishenglong666/article/details/23017351)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [automake 使用指南](https://blog.csdn.net/trochiluses/article/details/49465147)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值