makefile自动生成学习

https://www.cnblogs.com/jrglinux/p/6964169.html

关键是如何写Makefile.am  其他的交给 自动工具完成

添加一个 很好的博客 学习下

https://www.cnblogs.com/lixinjie/p/a-answer-about-thread-safety-in-a-interview.html

lesson 0  什么是Autotools  Automake
Autotools  Cmake  Scons
自动创建Makefile  
大型项目很难维护makefile  或者编写Makefile
所以有了自动创建Makefile的工具

Autotools 系列的工具包  包含  Autoconf  Automake  Libtool
工具安装
检测系统是否已经安装  which autoconf
自动安装  apt install  autoconf  automake  libtool
需要依赖的包  ......
手动安装  


Autotools  自动创建Makefile 流程
1.生成Makefile的通用规则文件  Makefile.in 
   手工编写Makefile.am文件
   #automake:将Makefile.am  -> Makefile.in
2.生成配置脚本configure
   #autoscan:生成configure.scan  ——>congfigure.ac
   修改 配置文件configure.ac
   #aclocal:生成aclocal.m4,存放autoconf运行需要的宏
   #autoheader :生成 config.h.in
   #autoconf:将configure.ac ——>configure
3.通过configure生成Makefile
   #./configure: Makefile.in  ——> Makefile
   #make ; make install   
   
实战 
运行 #autoscan   
mv  configure.scan configure.ac 
vim configure.ac
	 AC_PREREQ([2.69])
	 AC_INIT(mp3 , 1.0, zhangkele.cc )//修改的信息  发布版本信息
	 AC_CONFIG_SRCDIR([hello.c])
	 AC_CONFIG_HEADERS([config.h])
	 AM_INIT_AUTOMAKE//添加进来的

     AC_OUTPUT(Makefile)//添加生成什么文件  这里就叫Makefile

#aclocal 
#autoheader 产生 config.h.in
#autoconf   产生了  configure

继续 手动创建 Makefile.am   进行手工编写如下内容 保存
      AUTOMAKE_OPTIONS = foreign                                                                          
      bin_PROGRAMS = mp3 
      mp3_SOURCES = hello.c

# automake --add-missing  
执行这个命令 帮助自动添加缺少的文件并且通过Makefile.am产生了Makefile.in 

#./configure 
执行这个命令利用Makefile.in 产生了Makefile
	 
#make 
执行了结束产生了 我们需要的 可执行文件 mp3 了

#make install   	 
执行这个命令  就代表着将这个可执行文件mp3安装到系统中了
便可以直接输入执行文件名mp3 直接运行了 
	 
#make uninstall
执行这个命令就是卸载 上面安装的文件   注意要在安装的目录执行这个命令

#make clean 
#make distclean
执行这两个命令就不要讲了吧  都是清理一些东西

	 
	 
lesson1
使用Autotools宏、变量配置flat目录的Makefile

软件目录的结构
Makefile.am语法
Configure.ac宏

目录结构
Flat
    所有文件都存放在同一个目录下面
Shallow
    主出现源文件存放在顶层目录中
	各个模块文件放在各个子目录中
Deep
	所有源文件都存放在各个子目录中

   
Automake的宏、变量说明

文件编译类型     说明
_PROGRAMS        表示生成目标是可执行文件
_LIBRARIES       生成目标为库文件
_LTLIBRARISE     使用LIBTOOL生成库文件
_HEADERS         头文件
_DATA            数据文件、配置文件


编译配置        说明
_SOURCES        目标依赖的源文件
_LIBADD         生成库时需要链接的其他库  
_LDADD          链接需要的链接的库
_LDFLAGS        链接选项:-I /-L/-shared/-fPIC     
_LIBTOOLFLAGS   Libtool编译选项

路径变量        值
bindir          $(prefix)/bin
libdir          $(prefix)/lib
datadir         $(prefix)/share
sysconfdir      $(prefix)/etc
includedir      $(prefix)/include
$(top_srcdir)   工程顶目录
$(top_builddir) 目标文件顶层目录
noinst          不安装

其他变量        说明
INCLUDES        链接所需要的头文件
SUBDIRS         传递处理子目录
EXTRA_DIST      打包文件或目录

Makefile.am书写示范  百度吧!!!
Makefile.am语法
主要有宏、变量组成
     各个变量定义生成需要被编译 连接的目标 依赖源文件 需要安装的目录等   
     工具automake根据这些目标和源文件添加规则,生成makefiel.in
少量的makefile语法  注释
     注释使用##表示,不会被输出到Makefile.in  
     在makefile.am 定义的makefile代码将被添加到makefile.in的合适位置

按照笔记来干 就可以了  很easy 不多说

 

posted on 2019-05-09 10:18  zhangkele  阅读(315)  评论(0编辑  收藏  举报

导航