如何使用autotools制作Makefile

news2025/1/11 19:42:55

本文将通过一个例子介绍如何使用autotools制作Makefile,最终运行可执行文件。
本例子中使用的源代码a.c如下。

#include "stdio.h"
void main()
{
        int a,b;
        int c;
        printf("请输入两个数:\n");
        scanf("%d %d",&a,&b);
        c=a+b;
        printf("a=%d,b=%d,a+b=%d\n",a,b,c);
}

在使用之前先确保系统已经安装了autoconf等工具。
一开始文件夹下只有源文件a.c,首先使用下面的命令。

autoscan

autoscan命令会在给定目录及其子目录树中检查源文件,若没有给出目录,就在当前目录及其子目录树中进行检查,它会搜索源文件以寻找一般的移植性问题并创建一个文件“configure.scan”,该文件就是接下来autoconf要用到的“configure.ac”原型。
使用该命令后在生成了文件autoscan.log和configure.scan,如下图所示。
在这里插入图片描述
configure.scan文件的内容如下图所示。
在这里插入图片描述
其中,以“#”号开始的行为注释。
AC_PREREQ 宏声明本文件要求的autoconf版本,如本例使用的版本2.69。
AC_INIT宏用来定义软件的名称和版本等信息,BUG-REPORT-ADDRESS一般为作者的E-mail。
AC_CONFIG_SRCDIR宏用来侦测所指定的源文件是否存在,来确定源目录的有效性,此处为当前目录下的a.c。
AC_CONFIG_HEADER宏用于生成config.h文件,以便autoheader使用。
接下来使用下面的命令将configure.scan文件更名为configure.ac。

mv configure.scan configure.ac

然后打开configure.ac文件并添加如下内容。

#                                               -*- Autoconf -*-
# Process this file with autoconf to produce a configure script.

AC_PREREQ([2.69])
#AC_INIT([FULL-PACKAGE-NAME], [VERSION], [BUG-REPORT-ADDRESS])
AC_INIT(a,1.0)
AM_INIT_AUTOMAKE(a,1.0)
AC_CONFIG_SRCDIR([a.c])
AC_CONFIG_HEADERS([config.h])

# Checks for programs.
AC_PROG_CC

# Checks for libraries.

# Checks for header files.

# Checks for typedefs, structures, and compiler characteristics.

# Checks for library functions.
AC_CONFIG_FILES([Makefile])
AC_OUTPUT
# AC_OUTPUT(Makefile)

相比于之前的configure.scan,configure.ac所做改变的地方如下图所示。
在这里插入图片描述
AM_INIT_AUTOMAKE是需要自己另加的,它是automake所必备的宏,也同前面一样,PACKAGE-NAME是所要产生软件套件的名称,VERSION是版本编号。
AC_CONFIG_FILES宏用于生成相应的Makefile文件。
也可以不加AC_CONFIG_FILES这一行,直接用AC_OUTPUT(Makefile)代替。
依次使用下面的命令生成相应的文件。

aclocal
autoconf
autoheader

使用aclocal命令会生成aclocal.m4文件和autom4te.cache文件。
使用autoconf命令生成configure文件。
使用autoheader命令生成config.h.in文件,该工具通常会从“acconfig.h”文件中复制用户附加的符号定义。
在这里插入图片描述
接下来在该目录下新建一个Makefile.am文件,并在其中键入下面的代码。

AUTOMAKE_OPTIONS = foreign
bin_PROGRAMS = a
a_SOURCES = a.c

AUTOMAKE_OPTIONS为设置automake的选项,由于GNU对自己发布的软件有严格的规范,比如必须附带许可证声明文件COPYING等,否则automake执行时会报错。automake提供了3种软件等级:foreign、gnu和gnits,让用户选择采用,默认等级为gnu。本例使用foreign等级,它只检测必须的文件。
bin_PROGRAMS定义要生成的可执行程序的文件名,如果要产生多个执行文件,每个文件名用空格隔开。
a_SOURCES定义“a”这个执行程序所需要的原始文件,如果“a”这个程序是由多个原始文件所产生的,则必须把它所用到的所有原始文件都列出来,并用空格隔开。要注意的是,如果要定义生成多个可执行文件,则对每个执行程序都要定义相应的file_SOURCES。
接下来使用automake命令。

automake --add-missing

这里使用选项“–adding-missing”可以让automake自动添加有一些必需的脚本文件,生成了Makefile.in文件,如下图所示。
在这里插入图片描述
然后运行可执行程序,把Makefile.in变成最终的Makefile。

./configure

可以看到,运行上面的命令之后Makefile文件就生成了。
在这里插入图片描述
然后使用make命令,就生成了下面的a可执行文件,然后运行该文件。
在这里插入图片描述

make 默认是make all
make install 把该程序安装到系统目录中去,此时直接运行可执行文件,也能出现正确的结果
make clean 清除之前编译产生的可执行文件以及目标文件
make dist 将程序和相关的文档打包为一个压缩文档

使用autotools制作Makefile文件尤其适合包含许多文件的项目,我们只需要在Makefile.am文件中输入目标文件、依赖文件、文件目录等就可以轻松地生成Makefile了。
使用autotools制作Makefile文件的指令汇总:

autoscan
mv configure.scan configure.ac
修改configure.ac中的内容
aclocal
autoconf
autoheader
新建Makefile.am文件键入代码
automake --add-missing
./configure
make
./a
Makefile也可以用makefile代替,但是前后要保持名称一致

以上就是使用autotools制作Makefile文件的所有内容了,希望对你有用!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/999221.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

大数据课程L3——网站流量项目的系统搭建

文章作者邮箱:yugongshiye@sina.cn 地址:广东惠州 ▲ 本章节目的 ⚪ 了解网站流量项目的运行环境; ⚪ 了解网站流量项目的日志采集系统搭建; ⚪ 了解网站流量项目的离线业务系统搭建; ⚪ 了解网站流量项目的Hive做离线数据处理; ⚪ 了解网站流量项目的…

盲打键盘的正确指法指南

简介 很多打字初学者,并不了解打字的正确指法规范,很容易出现只用两根手指交替按压键盘的“二指禅”情况。虽然这样也能实现打字,但是效率极低。本文将简单介绍盲打键盘的正确指法,以便大家在后续的学习和工作中能够提高工作效率…

Nacos安装及在项目中的使用

目录 概要一、安装 Nacos1、下载 Nacos2、解压3、启动 Nacos 服务器4、自定义Nacos启动脚本5、访问Nacos Web控制台 二、Nacos----服务注册与发现1、添加 Nacos 依赖2、配置 Nacos 服务器地址3、使用 Nacos 注册服务4、启动服务 三、Nacos----配置管理1、创建配置数据2、从 Nac…

技师学院物联网实训室建建设方案

一、概述 1.1专业背景 物联网(Internet of Things)被称为继计算机、互联网之后世界信息产业第三次浪潮,它并非一个全新的技术领域,而是现代信息技术发展到一定阶段后出现的一种聚合性应用与技术提升,是随着传感网、通…

深圳站WOT全球技术创新大会2023,精彩即将开启!

前几天刷屏的“中国大模型顶流群聊笔记”想必很多人都看到了,包括百川智能创始人&CEO王小川,创新工场董事长、零一万物创始人李开复,澜舟科技CEO周明在内的20多位中国大模型领域模型层、工具层、应用层的“顶流”们,在西溪湿地…

【校招VIP】专业课考点之死锁

考点介绍: 在两个或者多个并发进程中,如果每个进程持有某种资源而又等待其它进程释放它或它们现在保持着的资源,在未改变这种状态之前都不能向前推进,称这一组进程产生了死锁。通俗的讲就是两个或多个进程无限期的阻塞、相互等待的…

使用Python和BeautifulSoup提取网页数据的实用技巧

在数据驱动的时代,获取网页数据并进行分析和处理是一项重要的任务。Python作为一门强大的编程语言,在处理网页数据的领域也表现出色。本文将分享使用Python和BeautifulSoup库提取网页数据的实用技巧,帮助你更高效地获取和处理网页数据。 1、了…

什么牌子的运动蓝牙耳机好用、运动耳机品牌排行榜推荐

运动与健康息息相关,人们越来越认识到运动带来的益处,例如增强心肺功能、提高新陈代谢率,并能预防多种慢性疾病。随着社交媒体上越来越多人分享自己的运动心得,更多的人也被激发起参与其中的热情。 在运动过程中,音乐的…

猫头虎博主赠书三期:《Go编程进阶实战: 开发命令行应用、HTTP应用和gRPC应用》

🎉猫头虎博主赠书三期🎉:《Go编程进阶实战: 开发命令行应用、HTTP应用和gRPC应用》 🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🦄 博客首页…

EditPlus 配置python 及Anaconda中的python

若不是pycharm vscode 太大,太占内存,谁会想到用Notepad,EdirPlus 配置python呢!!! 话不多说,首先你自己安装好EditPlus。开始 菜单栏 选择 工具 -> 配置自定义工具 组名:python 命令:d:\*…

基于51单片机的称重电子秤proteus仿真设计

一、设计背景 随着微电子技术的应用,市场上使用的传统称重工具已经满足不了人们的要求。为了改变传统称重工具在使用上存在的问题,在本设计中将智能化、自动化、人性化用在了电子秤重的控制系统中。本系统主要由单片机来控制,测量物体重量部分使用称重传…

雅思口语同替高分表达

目录 雅思口语题目准备 Riding a bike 1. Did you have a bike when you were young? 2. Did you ride a bike when you were little? 3. Did you ride a bike to school? 4. Do you ride a bike when you go out no? 雅思口语经验 口语高分同替词汇 中式英语问题…

计算机竞赛 基于生成对抗网络的照片上色动态算法设计与实现 - 深度学习 opencv python

文章目录 1 前言1 课题背景2 GAN(生成对抗网络)2.1 简介2.2 基本原理 3 DeOldify 框架4 First Order Motion Model5 最后 1 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 基于生成对抗网络的照片上色动态算法设计与实现 该项目较为新颖&am…

系列五、Nginx配置实例之反向代理1

一、目标 Linux服务器部署Tomcat的运行环境,然后通过Windows的www.123.com访问,能够访问到Tomcat的主页(有猫的页面) 二、步骤 2.1、下载apache-tomcat-8.5.63.tar.gz安装包 # 我分享的 链接:https://pan.baidu.com…

【数据结构与算法系列4】长度最小的子数组 (C++ Python)

给定一个含有 n 个正整数的数组和一个正整数 target 。 找出该数组中满足其总和大于等于 target 的长度最小的 连续子数组 [numsl, numsl1, ..., numsr-1, numsr] ,并返回其长度**。**如果不存在符合条件的子数组,返回 0 。 示例 1: 输入&…

virtualbox虚拟机中安装FreeDOS系统和DJGPP编译环境

一、安装FreeDOS系统 1、从官网下载FreeDOS系统镜像,下载的压缩包中包含两个文件:后缀为.iso和.img的镜像 ​​​下载页面 http://www.freedos.org/download/ 直接下载链接 https://www.ibiblio.org/pub/micro/pc-stuff/freedos/files/distributions/1.…

TAITherm专业热管理工具

TAITherm是ThermoAnalytics公司开发的专业三维热仿真分析工具,广泛应用于国内外汽车、工业自动化、轨道交通、重型机械等行业的热仿真设计中。同系列的CoTherm耦合优化平台可支持热流耦合、一三维耦合、FMU集成、设计优化、敏感性分析等应用。 产品模块介绍 TAITh…

LeetCode518. 零钱兑换 II 以及 动态规划相关的排列组合问题

文章目录 一、题目二、题解方法一:完全背包问题的变体(版本1)方法二:完全背包问题变体(版本2) 三、拓展:先遍历物品后遍历背包vs先遍历背包后遍历物品先遍历物品后遍历背包(组合问题…

1905. 统计子岛屿

给你两个 m x n 的二进制矩阵 grid1 和 grid2 ,它们只包含 0 (表示水域)和 1 (表示陆地)。一个 岛屿 是由 四个方向 (水平或者竖直)上相邻的 1 组成的区域。任何矩阵以外的区域都视为水域。 如…

文件夹怎么加密码?文件夹怎么设置密码?

文件夹设置密码可以有效地保护文件夹的安全,避免数据泄露。那么,文件夹怎么加密码呢?下面我们就来了解一下。 文件夹保护3000 文件夹保护3000提供了三种文件夹保护方式,文件夹加密码就是其中之一。我们可以通过三种简单快捷的方式…