Makefile稳步攻略-单文件automake深入

makefile基础教程 Makefile文件其实就是管理编译的工具。使用makefile文件,去寻找相关的*.c 、.h或者.a、*.so的静态库动态库文件等。makefile文件就是告诉编译链工具去相关的路径上寻找,寻找相关的依赖文件。平常若是简单的一两个文件下,可以使用编译器进行gcc编译文件,但是一旦文件多了,需要手动的每一条命令进行执行就会有极大的麻烦,同时也不好管理。以下就使用相关简单的例子去一步步深入makefile,了解make文件是如何进行文件管理,从而使编译器进行文件编译的。 阅读详情

Makefile稳步攻略-单文件automake深入

         在文章《Makefile稳步攻略(一)-单文件automake初步》里,通过一个单文件代码实践了通过automake生成makefile的详细过程。本文将详细分析具体过程中具体命令及具体操作的详细含义。

         注:本文非原创,由网络相关文档及linux系统自带手册组合而成。

autoscan

  autoscan是用来扫描源代码目录生成configure.scan文件的。autoscan可以用目录名做为参数,但如果你不使用参数的话,那么autoscan将认为使用的是当前目录。autoscan将扫描你所指定目录中的源文件,并创建configure.scan文件。

configure.ac

configure.scan包含了系统配置的基本选项,里面都是一些宏定义,将它改名为configure.ac。

configure.ac文件的内容是一些宏,这些宏经过处理(后续的autoconf)后会变成检查系统特性、环境变量、软件必须的参数的shell脚本。configure.in文件中的宏的顺序并没有规定,但是你必须在所有宏的最前面和最后面分别加上AC_INIT宏和AC_OUTPUT宏。

  在configure.ac中:

  AC_INIT(FILE) :这个宏用来检查源代码所在的路径。

AM_INIT_AUTOMAKE(PACKAGE, VERSION)  :这个宏是必须的,它描述了我们将要生成的软件包的名字及其版本号:PACKAGE是软件包的名字,VERSION是版本号。当你使用make dist命令时,它会给你生成一个类似helloworld-1.0.tar.gz的软件发行包,其中就有对应的软件包的名字和版本号。

AC_PROG_CC:这个宏将检查系统所用的C编译器。

AC_OUTPUT([FILE]):这个宏是我们要输出的Makefile的名字。

aclocal

aclocal是一个perl 脚本程序。aclocal根据configure.in文件的内容,自动生成aclocal.m4文件。aclocal的定义是:“aclocal - create aclocal.m4 by scanning configure.ac”。

执行aclocal后我们会得到aclocal.m4文件。产生了configure.in和aclocal.m4 两个宏文件后,我们就可以使用autoconf来产生configure文件了。

autoconf

autoconf是用来产生configure文件的。configure是一个脚本,它能设置源程序来适应各种不同的操作系统平台,并且根据不同的系统来产生合适的Makefile,从而可以使你的源代码能在不同的操作系统平台上被编译出来。

autoheader

touch

执行命令“touch NEWS README AUTHORS ChangeLog“产生相应的文件。

Makefile.am

  Makefile.am是用来生成Makefile.in的,需要你手工书写。Makefile.am中定义了一些内容:

AUTOMAKE_OPTIONS。

  这个是automake的选项。在执行automake时,它会检查目录下是否存在标准GNU软件包中应具备的各种文件,例如AUTHORS、ChangeLog、NEWS等文件。我们将其设置成foreign时,automake会改用一般软件包的标准来检查。

bin_PROGRAMS:这个是指定我们所要产生的可执行文件的文件名。如果你要产生多个可执行文件,那么在各个名字间用空格隔开。

xxx_SOURCES:这个是指定产生xxx时所需要的源代码。如果它用到了多个源文件,那么请使用空格符号将它们隔开。如果你在bin_PROGRAMS定义了多个可执行文件,则对应每个可执行文件都要定义相对的filename_SOURCES。

automake

  我们使用automake --add-missing来产生Makefile.in。

  选项--add-missing的定义是“add missing standard files to package”,它会让automake加入一个标准的软件包所必须的一些文件。

  我们用automake产生出来的Makefile.in文件是符合GNU Makefile惯例的,接下来我们只要执行configure这个shell 脚本就可以产生合适的 Makefile文件了。

Makefile

  在符合GNU Makefiel惯例的Makefile中,包含了一些基本的预先定义的操作:

make:根据Makefile编译源代码,连接,生成目标文件,可执行文件。

make clean:清除上次的make命令所产生的object文件(后缀为“.o”的文件)及可执行文件。

make install:将编译成功的可执行文件安装到系统目录中,一般为/usr/local/bin目录。

make dist:产生发布软件包文件(即distribution package)。这个命令将会将可执行文件及相关文件打包成一个tar.gz压缩的文件用来作为发布软件的软件包。

  它会在当前目录下生成一个名字类似“PACKAGE-VERSION.tar.gz”的文件。PACKAGE和VERSION,是我们在configure.in中定义的AM_INIT_AUTOMAKE(PACKAGE, VERSION)。

make distcheck:生成发布软件包并对其进行测试检查,以确定发布包的正确性。这个操作将自动把压缩包文件解开,然后执行configure命令,并且执行make,来确认编译不出现错误,最后提示你软件包已经准备好,可以发布了。

make distclean:类似make clean,但同时也将configure生成的文件全部删除掉,包括Makefile。

Linux驱动程序模块编程单文件makefile示例 linux下的驱动程序模块编程makefile文件编写实例,单文件示例。内容清晰,可根据自己的编程环境进行简单就该即可运行 立即下载

相关推荐

Dify工作流自动化:如何用Trae AI助手10倍提升你的开发效率(含避坑指南)

本文详细介绍了如何利用Trae AI助手自动化生成Dify工作流,实现开发效率的10倍提升。通过构建DSL示例库、精准需求描述和四步实战法,开发者可将重复的配置工作交给AI,快速生成可运行的工作流,并提供了关键的避坑指南。

weixin_29062865的博客 371

Linux学习笔记——例说makefile 单个C文件

0.前言     从学习C语言开始就慢慢开始接触makefile,查阅了很多的makefile的资料但总感觉没有真正掌握makefile,如果自己动手写一个makefile总觉得非常吃力。所以特意借助博客总结makefile的相关知识,通过例子说明makefile的具体用法。     例说makefile大致分为4个部分     1.只有单个C文件     2.含有多个C文件     3

物联网 IoT 经验分享 2万+

AutoSAR实战:手把手教你配置PNC(Partial Network Cluster)实现精准休眠与唤醒

本文详细介绍了如何在AutoSAR中配置PNC(Partial Network Cluster)实现精准休眠与唤醒,通过DaVinci Configurator工具逐步指导,结合ComM模块的协同调试,优化车载电子系统的能耗管理。文章包含实战步骤、常见错误排查及功耗优化数据,适合汽车电子开发工程师参考。

weixin_33725239的博客 466

makefile简单入门

<br />1、弄清楚这个技术可以干什么,包括哪些知识点,通过论坛,博客得知。<br />2、寻找资料进行系统的学习,通过电炉,迅雷来获取PPT,CHM,视频,DOC,原代码,书籍等<br />3、模仿做一两个项目寻找不足,进行突破上更高一台阶。<br /> <br />注意:寻找资料和整理资料是衡量一个人专业水平高低的重要依据。

超越 1351

保姆级教程:在Windows 11上用VSCode和Conda搞定Depth-Anything-3(含常见报错修复)

本文提供在Windows 11系统上使用VSCode和Conda配置Depth-Anything-3的完整教程,涵盖环境搭建、依赖安装、常见报错修复及深度图生成实战。特别针对CUDA与PyTorch版本匹配、Hugging Face镜像加速等关键问题提供解决方案,帮助开发者高效实现计算机视觉中的深度估计应用。

weixin_30338481的博客 347

腾讯混元3D世界模型2.0实战:从AI生成到Unity/UE引擎集成全指南

生成式AI正在重塑3D内容创作流程,其核心原理是通过大语言模型理解自然语言描述,并驱动多阶段生成流水线自动创建3D资产与场景。这项技术为游戏开发、虚拟仿真和数字孪生领域带来了革命性的效率提升,能够将传统需要数周的美术协作流程压缩至几分钟。在实际应用中,开发者需要掌握本地环境部署、模型推理优化以及生成资产与主流游戏引擎的集成工作流。本文以腾讯开源的混元3D世界模型为例,详细解析如何将AI生成的场景通过插件高效导入Unity和Unreal Engine,并针对光照烘焙、材质调整、性能优化等工程实践问题提供解决方

cnracht8153的博客 1396

09-基础篇-一步一步写MakeFile

另外在实际的开发过程中,一整个系统,不可能是一个公司能够做完成,A公司和B公司同时做项目,一般A公司不可能对B公司开源自己的代码,因而需要有一种方式将代码屏蔽,而只将功能抽象出来,这种方法就是库。从上面的Makefile看出,首先print.c和hello.c分别编译和汇编生成print.o,hello.o的机器指令,然后gcc将print.o和hello.o链接成目标程序hello。如下目录,我们重新创建了3个目录,src用于放所有c文件,obj用于放所有的.o文件,inc用于放所有的.h文件。

sishen4199的博客 304

DolphinScheduler租户配置踩坑实录:手把手教你修复‘tenant not exists‘报错

本文深度解析DolphinScheduler的租户模型,并提供一套从界面到数据库的系统性排查流程,手把手教你修复常见的'tenant not exists'报错。文章揭示了该错误的本质是用户与租户数据关联不一致,并给出了通过UI或SQL更新的具体修复方案,同时分享了根因分析与预防措施,帮助用户从根本上理解和避免此类问题。

2w3e4r5t6y的博客 541

Linux开发入门:Makefile与CMake轻松上手

Makefile:写“目标-依赖-命令”,make编译,make clean清理;CMake:写,建build文件夹,cmake ..生成Makefile,再make;遇到错,先看报错信息,大概率是Tab没按、依赖少了、没装工具这几个问题。等用熟了简单场景,再慢慢学更复杂的用法(比如生成库文件、多目录项目)。工具都是“用会的”,多动手试几次,你会发现Makefile和CMake其实一点都不难~

希望我的文章可以帮到你 978

中国农业银行——轻量式云原生应用平台(轻云平台)

2021年10月,中国人民银行等联合发布了《关于规范金融业开源技术应用与发展的意见》(银办发〔2021〕146 号),规范金融机构合理应用开源技术,提高应用水平和自主可控能力,促进开源技术健康可持续发展。前期,为助力成员单位做好开源技术应用与发展工作,北京金融科技产业联盟开源专委会组织了金融业开源技术应用、创新等方面的案例征集,现对部分优秀案例进行宣传,发挥先进典型示范引领作用。申报单位:中国农业银行股份有限公司技术领域:云原生、无服务器架构(Serverless)、DevOps。

银行信息系统应用架构详解 2394

【CUDA Runtime】第一个“Hello World“程序

CUDA(Compute Unified Device Architecture)是 NVIDIA 提供的一个并行计算平台和编程模型,旨在通过利用 GPU 的强大计算能力来加速计算密集型应用。对于许多开发者而言,开始学习 CUDA 编程的第一步通常是编写一个简单的“Hello World”程序。尽管 CUDA 的实际应用远远超出一个简单的例子,但这个初步的示例能帮助开发者快速入门,理解基本的 CUDA 编程流程。

m0_62599305的博客 1507

makefile的使用方法(简单视频教程以及详细文字教程)(makefile教程、makefile教学)

参考教程视频链接:[教程]Makefile的写法 文章目录makefile基本语法格式:简单示例(单文件)makefile写法带包含关系的多文件makefile写法(包含1个文件)在需要发布源码时,编译后删除可执行文件和.o链接文件的makefile指令(make clean)带包含关系的多文件makefile写法(包含>=2个文件)makefile指定编译器CC(名字自己定)增加自定义参数多个主函数编译生成多个可执行文件的makefile写法(all指令) makefile基本语法格式: 简单示例

Dontla的博客 1770

Fast-Lio2代码及论文解析2

点云数据频率较低而IMU为高频数据。

努力努力努力 2278

通用的简单Makefile之单文件单程序

因为自己记性太差,很多东西隔段时间就会忘记,就经常会写点小程序做个测试,这些程序非常小,基本都会将代码放在一个代码文件中。虽然编译它们也就是一条语句,但是有时候会差点头文件、或者敲错字符啥的,每次都要在终端下敲编译命令也挺烦的,索性就写了这个Makefile文件,在ubuntu下当作模板,下次即使不小心把测试代码都删了也还能拿来就用。     该Makefile主要是把当前目录下的所有“.c”文

dayong419的专栏 1094

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

makefile 单文件夹模版

.PHONY:all clean  MKDIR = mkdir RM = rm RMFLAGS = -rf CC = gcc DIR_OBJS = objs DIR_EXES = exes DIR_DEPS = deps DIRS = $(DIR_OBJS) $(DIR_EXES) $(DIR_DEPS)

xp5xp6的博客 401

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

Linux_项目自动化构建工具-make/makefile

make是解释makefile中的指令的工具 make是一条命令,makefile是一个文件,两个搭配使用,完成项目自动化构建 makefile带来的好处就是——“自动化编译”,一旦写好,只需要一个make命令,整个工程完全自动编译,极大的提高了效率。 文章目录1.单文件makefile2.make clean3.伪目标.PHONY4.多文件makefile5.$@ $^ $< 1.单文件makefile 首先在项目中 touch makefile(Makefile)文件,然后再makefile文件中

dodamce的博客 270

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

makefile编译文件

参考链接:https://www.bilibili.com/video/BV1hE411N7BK?from=search&seid=7021460025334894092&spm_id_from=333.337.0.0 文件中拥有Makefile和makefile,使用命令make优先运行的是小写的makefile。 创建了五个文件:main.c 、tool1.c 、tool1.h 、tool2.c 、tool2.h。 //main.c #include "tool1.h" #inc

ld1461575230的博客 3231

Make以及Makefile的编写

1概述:能读懂, 编写makefile应该是每一个Linux程序猿都必须拥有的基本素质,因为makefile是大型的工程中绕不过去的,你能不能写makefile了,会不会写makefile,从一个侧面说明了一个人是否具备完成大型工程的能力。因为,makefile关系到了整个工程的编译规则:如果这个工程没有编译过,那么我们的所有C文件都要编译并被链接。如果这个工程的某几个C文件被修改,那么我们只编译...

weixin_38176039的博客 1万+

C/C++ - makefile(规则、伪目标、变量、内置函数)

视频:https://www.bilibili.com/video/BV1dW411n7vk?from=search&seid=13869936161616988114 makefile 可以试想一下,有一个上百个文件的代码构成的项目,如果其中只有一个或几个文件进行修改,需要从头到尾将每一个文件都重新编译是一个比较繁琐的过程。 为此,引入了Make工程管理器的概念,工程管理器指管理较多文件,自动根据文件时间自动发现更新过的文件而减少编译的工作量,同时通过读入Makefile文件来执行大量的编译工作。

LawssssCat的博客 1418

linux下make以及makefile(一)

0x00 前言 文章中的文字可能存在语法错误以及标点错误,请谅解; 如果在文章中发现代码错误或其它问题请告知,感谢! 0x01make工具简介 make工具是一个根据makefile文件内容,针对目标(可执行文件)进行依赖性检测(要生成该可执行文件之前要有哪些中间文件)并执行相关动作(编译等)的工具 。而这个makefile文件类似一个脚本,其中内容包含make所要进行的处理动作以及依赖关系。 另...

C/C++攻城狮 3万+

Makefile编译文件

make工程管理器根据时间戳来确定需要编译的文件,通过读入Makefile文件的内容来执行大量的编译工作。

zhuyouyang的博客 890

Makefile的两种编译方法——原地编译和单独输出文件夹编译

原地编译 编译代码时默认是原地编译,原地编译就是编译生成的.o文件和相应的.c文件是在同一目录的。原地编译比较简单,但是会污染源码,目录里会多出生成的.o文件,并且编译不同配置的目标文件,都要先清除之前的.o文件。 单独输出文件夹编译 在编译时指定输出目录,在编译的时候所有生成的.o文件或生成的其他文件全部丢到那个输出目录下去。同一份代码在编译不同配置的目标文件时,可以指定不同的输出目录,这样就可以同时有两份不同配置的目标文件,并且不会污染源代码。 两种编译方法的应用 在uboot和kernel都

weixin_42031299的博客 5748

makefile 单独编译一个文件

#!/sh/bin .SUFFIXES:.c.o CDIR = /Users/shelley/c BINDIR = $(CDIR)/bin CC = gcc CFLAGS = -g -O RM = rm -f getoptOBJ = getopt.o getopt:$(getoptOBJ) $(CC) $(CFLAGS) -o $(BIND...

weixin_30666753的博客 749
上一篇: Linux设备模型之input子系统详解
下一篇: Linux 多线程编程入门--线程函数解释
ShowMan
博客等级 码龄26年 280粉丝 321原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值