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 不多说
makefile自动生成学习的更多相关文章
- Makefile自动生成头文件依赖
前言 Makefile自动生成头文件依赖是很常用的功能,本文的目的是想尽量详细说明其中的原理和过程. Makefile模板 首先给出一个本人在小项目中常用的Makefile模板,支持自动生成头文件依赖 ...
- Linux Makefile自动生成--config.h
Linux Makefile自动生成--config.h http://blog.csdn.net/spch2008/article/details/12510805
- C/C++ makefile自动生成工具(comake2,autotools,linux),希望能为开源做点微薄的贡献!
序 在linux下C或C++项目开发,Makefile是必备的力气,但是发现手写很麻烦. 在百度有个comake2工具,用于自动生成Makefile工具,而在外边本想找一个同类工具,但发现 ...
- Makefile自动生成工具-----autotools的使用(详细)
相信每个学习Linux的人都知道Makefile,这是一个很有用的东西,但是编写它是比较复杂,今天介绍一个它的自动生成工具,autotools的使用.很多GNULinux的的软件都是用它生成Makef ...
- makefile自动生成依赖关系
手工编写依赖关系不仅工作量大而且极易出现遗漏,更新也很难及时,修改源或头文件后makefile可能忘记修改.为了解决这个问题,可以用gcc的-M选项自动生成目标文件和源文件的依赖关系.-M选项会把包含 ...
- Makefile 自动生成依赖
虽然以前对Makefile有个基本概念,但是真正到自己去写一个哪怕是简单的Makefile时也会遇到不少的麻烦. 现在我有如下文件 dList.h dList.c memory.c debug. ...
- Makefile自动生成
automake/autoconf入门作为Linux下的程序开发人员,大家一定都遇到过Makefile,用make命令来编译自己写的程序确实是很方便.一般情况下,大家都是手工写一个简单Makefile ...
- Makefile自动生成:cmake
http://blog.csdn.net/pipisorry/article/details/51647073 编辑makefile文件CMakeLists.txt,使用cmake命令自动生成make ...
- makefile自动生成目标与依赖的关系
有main.c: #include <stdio.h> #include "command.h" int main(int argc, const char *argv ...
随机推荐
- Dubbo服务调用过程源码解析④
目录 0.服务的调用 1.发送请求 2.请求编码 3.请求的解码 4.调用具体服务 5.返回调用结果 6.接收调用结果 Dubbo SPI源码解析① Dubbo服务暴露源码解析② Dubbo服务引用源 ...
- LeetCode数组移除数组中目标元素等题目
一种自己解题,一种高赞解题 /** * 移除数组中目标元素,返回新数组长度 * @param nums * @param val * @return */ public int removeEleme ...
- Java数组的三种打印方式
1.数组的输出的三种方式 一维数组: 定义一个数组 int[] array = {1,2,3,4,5}; (1)传统的for循环方式 for(int i=0;i<array.length;i++ ...
- JavaDailyReports10_17
学习JavaWeb第一天 输出我的第一个HelloWorld! 1 <%@ page language="java" import="java.util.*&quo ...
- docker基础属性简介包含镜像 容器 registry服务等概念及关系
Docker 镜像 我们都知道,操作系统分为内核和用户空间.对于 Linux 而言,内核启动后,会挂载 root 文件系统为其提供用户空间支持.而 Docker 镜像(Image),就相当于是一个 r ...
- 行业动态 | DataStax 2021年新年预测
Happy New Year! 今天是元旦,DataStax在此祝大家2021新年快乐 o(*≧▽≦)ノ 新的一年中,我们也将为大家提供更多有用的资源,并组织更多有意义的活动. 同时我们 ...
- PostgreSQL使用MySQL外表(mysql_fdw)
postgres使用mysql外表 转载请注明出处https://www.cnblogs.com/funnyzpc/p/14223167.html 浅谈 postgres不知不觉已经升到了版本13,记 ...
- ASP.Net中的TreeView控件中对节点的上移和下移操作
Web中的TreeView中的没有PreNode和NextNode属性. 但它的集合属性中有一个IndexOf属性,从而能够找到它的前一个节点知后一个节点. TreeView中要么只有一个根节点:要么 ...
- windows中关闭端口的方法
打开cmd:输入-ano | findstr "端口号" 控制台会输出占用端口的pid 如"8380" 再向cmd中输入 taskkill /f/pid 838 ...
- 改进你的c#代码的5个技巧(二)
在本文中,我将向你展示c#编程的5个最佳实践.我从日常编程经验中学到了这些实践.我在release模式下测试了所有的代码,并在开发环境稳定后进行了截屏.我想你会喜欢这些建议的. 在使用数据类型之前选择 ...