如何使用autotools/automake自动生成Makefile文件
前言:
Linux下编程时,为了方便编译,往往使用Makefile文件自动完成编译,但是Makefile文件本身的书写十分复杂,规则很多。好在Linux为我们提供了自动生成功能完善的Makefile文件的工具autoconf/automake。本文讲述如何使用它们生成Makefile文件。要用到的工具组主要包括autoconf,automake,perl语言环境和m4。
因此,我们在使用autotools(automake,autoconf, autoheader, aclocal, autoscan, m4)生成Makefile之前, 应该先检查你的Linux系统中是否安装了automake,autoconf, autoheader,aclocal, autoscan, m4和perl。
- 检查是否安装了automake如:$automake --version, 其他的autotools也可以如此检查。
说明:一般来说我们只要安装了automake, autoconf和m4其他的autotools也会自动安装,另外就是一定记得安装perl。
automake生成makefile的原理
下图是在网上参考的使用autotools生成Makefile的流程和原理图:
动手实战:
下面以实例演示如何使用automake等生成Makefile文件。
1. 写一个简单的程序
主源文件:main.c
#include<stdio.h>
#include"calculate.h"
int main(int arc, char* argv[])
{
printf("hello world!\n");
int sum = add(10, 15);
printf("sum:%d", sum);
return 0;
}
头文件:calculate.h
#ifndef __CALCULATE__
#define __CALCULATE__
int add(int a, int b);
#endif
源文件:calculate.c
#include<stdio.h>
#include"calculate.h"
int add(int a, int b)
{
printf("a:%d, b:%d\n", a, b);
return (a+b);
}
使用ls命令查看如下:
2. 使用autoscan生成configure.scan文件,将其重命名为configure.ac,并做适当修改。
- 执行autoscan并重命名后查看:
- 查看configure.ac文件原始内容:
- 修改configure.ac内容如下:
AC_INIT()中分别应用程序的名字,版本,和作者的联系方式(一般是Email)
添加一行AM_INIT_AUTOMAKE(),添加相应的参数。
最后AC_OUTPUT()生成的文件。
注意:最后一行AC_OUTPUT,如果文件中已经包含AC_CONFIG_FILES([Makefile])则默认保持:AC_OUTPUT。
3. 使用aclocal工具生成aclocal.m4
4. 使用autoconf工具生成configure文件
5. 使用autoheader工具生成config.h.in文件
6 用vi生成一个空文件Makefile.am, 并编辑如下三项。
第一项:软件等级,有三个候选项:foreign,gnu,gnits
第二项:生成的可执行文件名
第三项:生成可执行文件所需的原始文件,有多个文件时用空格隔开,如本例
7 使用automake工具生成Makefile.in文件,内容如下:
8 运行configure配置生成最终的Makefile文件
9. 使用Makefile编译,并运行编译后的程序:
附加:
还可以将代码打包发布:
这些命令功能强大,很多参数的意思这里没列出来,可以查阅相关书籍和手册。本文旨在展示整个过程,和最常用到的参数。以后写程序特别是文件较多时是不是方便了很多?
另外更复杂目录结构可以参考:https://blog.csdn.net/cloud_desktop/article/details/20559741
如何使用autotools/automake自动生成Makefile文件的更多相关文章
- 使用autoconf与automake自动生成MakeFile文件
automake主要通过编辑Makefile.am来控制它的行为,下面就常用的三个Makefile.am配置做出说明. 1.1. autotools的工作原理 autotools最终是为了生成Make ...
- linux下使用automake工具自动生成makefile文件
linux环境下,当项目工程很大的时候,编译的过程很复杂,所以需要使用make工具,自动进行编译安装,但是手写makefile文件比较复杂,所幸在GNU的计划中,设计出了一种叫做Autoconf/Au ...
- 使用automake等命令自动生成Makefile文件 (转载)
使用automake等命令自动生成Makefile文件 Linux下编程时,为了方便编译,往往使用Makefile文件自动完成编译,但是Makefile文件本身的书写十分复杂,规则很多.好在Lin ...
- 一个简单的执行程序的GNU automake自动生成Makefile的方法及案例
一个简单的执行程序的GNU automake自动生成Makefile的方法及案例 在GNU的世界里,存在Automake这样的工具进行自动生成Makefile文件,automake是由Perl语言编写 ...
- 自动生成Makefile文件
主要的工具有autoscan, aclocal, autoheader, autoconfig,automake 1 .创建c源文件hello.c #include <stdio.h> i ...
- qmake使用方法(自动生成Makefile文件)
qmake的使用简介 下面是qmake的简单介绍和使用要领,更为详细的信息请参阅手册 qmake的介绍 手写Makefile是比较困难并且容易出错的,尤其是需要给不同的平台和编译器组合写几个Makef ...
- 使用automake等命令自动生成Makefile文件
参考:http://www.cnblogs.com/njucslzh/archive/2010/04/29/1723320.html
- GNU autotools自动生成Makefile 介绍
一.目的 使用autotools工具来帮助我们自动地生成符合自由软件惯例的makefile(这样就可以像常见的GNU程序一样,只要使用"./configure", "ma ...
- 使用autotools自动生成Makefile并在此之上使用dh-make生成可发布的deb程序包(详解)
转自:http://blog.csdn.net/longerzone/article/details/12705507 一.前言 本文将介绍如何使用autotools生成一个Makefile文件,并在 ...
- 利用 autoconf 和 automake 生成 Makefile 文件
一.相关概念的介绍 什么是 Makefile?怎么书写 Makefile?竟然有工具可以自动生成 Makefile?怎么生成啊?开始的时候,我有这么多疑问,所以,必须得先把基本的概念搞个清楚. 1.M ...
随机推荐
- mybatis-plus 时间查询
QueryWrapper userquery= new QueryWrapper<>(); user.and(true,wrapper -> wrapper.ge("CRE ...
- python_lib_0001_decorator_print_log
def decorator_log_funcname( func ): def wrapper(*arg, **kw): print("") ...
- kubernetes:v1.25 + containerd
由于kubernets从v1.24开始停止支持dockershim,kubernets不再支持通过docker来创建和管理容器.本文记录安装kubernetes v1.25 + containerd ...
- linux下influx客户端使用
influxdb-client 通过 sudo apt-cache search influx 找到了一个客户端工具 influxdb-client - command line interface ...
- 【情景题】NPDP经典题目(下)
1.员工Mary是ACE电气公司的产品经理,公司高管要求她准备一份评价标准清单,从而以该清单为基础来对该产品组合中的新机会进行评价.她提交的清单如下:-潜在市场份额-对公司获利能力的潜在贡献-产品开发 ...
- 看K线学炒股(8.10)
今天大盘看起来疲软但强势的一天,收涨1.01%. 广东骏亚,现价21.39,看尾盘,这只票现在看还有下跌空间,但也有反弹可能,跌到21元以下均价上可加仓,博止跌反弹.现在60分钟线看有点阴雨绵绵的意思 ...
- js 判断gps是否超出设定范围
var CKposition = { //经纬度转换成三角函数中度分表形式 rad: function (d) { return d * Math.PI / 180.0; }, // 根据经纬度计算距 ...
- Rest-Assured发送POST请求:创建Hello-imook
package heyuan.RestAssuredDemo;import static org.junit.jupiter.api.Assertions.*;import org.junit.jup ...
- Google在线深度学习神器Colab——科研角色
转载:Google在线深度学习神器Colab - 简书 (jianshu.com) 转载:不FQ,免费使用带GPU和TPU的深度学习开发环境_colab (sohu.com)
- DCU-GPU