zoukankan      html  css  js  c++  java
  • 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 不多说

  • 相关阅读:
    MobaXtern显示中文
    SD卡识别——记一次stm32识别BanqSD卡 V2.0识别失败的经历。
    《Java 底层原理》Jvm GC算法
    《Java 并发编程》ThreadLock详解
    《Java 底层原理》Jvm对象结构和指针压缩
    《Java 底层原理》Java内存模型
    《Java 底层原理》Java 字节码详解
    jinjia2中的变量使用
    jsonify和json的区别
    虚拟环境是什么?有什么用?怎么用?
  • 原文地址:https://www.cnblogs.com/zhangkele/p/10836944.html
Copyright © 2011-2022 走看看