简单而又完整的Makefile-转

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

        刚开始学习makefile是一个痛苦的过程,从杂乱无章的规则到一个简单的makefile再到一个系统化的makefile不是一蹴而就的事情。今天我就写一个简单的,规范的(相对而言),功能也算齐全的Makefile。适合于初学者的makefile。希望对新加入linux的同学们有用;

一,源文件准备

       假设在项目文件夹(PName)中我们有源文件:main.c com1.c com2.c com3.c com4.c 以及他们的头文件;在项目文件夹中有一个子目录 mylib;在PName/mylib中有一个display.c及其头文件。

二,分析

        在main.c中有我们的主函数,它会调用其他每一个源文件的一个函数(让他们串联起来)。我们把mylib里面的所有源文件编译成一个库(libYUER.a),最后连接到我们的项目中;

三,Makefile样例

#首先我们定义我们的命令变量

CC     =      gcc

AR     =      ar

RM    =      rm

CP    =      cp

#然后设置我们的参数变量

INCLUDES   = -I./mylib

CFLAGS   += -O2 $(INCLUDES)

LKFLAGS   += -L./mylib

#定义我们需要的各种局部变量

LIBS            = -lYUER

OBJS          = main.o com1.o com2.o com3.o com4.o

TARGET     = myapp

INSTALLDIR = /user/bin/PName

#利用我们准备好的各种变量定义规则

all:$(TARGET)

$(TARGET):$(OBJS) $(LIBS)

        $(CC) $(LKFLAGS) $(OBJS) $(LIBS) -o $@

mylib/libmylib.a::

        $(MAKE) -C mylib

%.o:%.c

        $(CC) -c $(CFLAGS) $< -o $@

#安装程序到指定的目录

install:

        $(CP) $(TARGET) $(INSTALLDIR)

#不要忘记清除中间文件,目标文件,子目录文件哦

clean:$(SUBDIR_CLEAN)

      -$(RM) *.o $(TARGET)

$(SUBDIR_CLEAN):

      $(RM) -C mylib clean

四,说明

        这是我个人总结的一些方法,不一定最好的,但还是希望对你们有帮助,特别是新手,刚开始的时候一定不要忽略了规范。其中参数变量还有很多可以设置(这里只是一个举例),编译命令前面必须以<Tab>开始,我这里用的是空格,所以复制测试的时候要注意。

五,子目录Mailefile

        子目录Makefile用于将子目录中的源文件生成指定的库,以被上层项目程序使用,子目录Makefile我们也遵循上面的格式

#首先我们定义我们的命令变量

CC     =      gcc

AR     =      ar

RM    =      rm

#然后设置我们的参数变量

INCLUDES   = -I../

CFLAGS   += -O2 $(INCLUDES)

#定义我们需要的各种局部变量

OBJS          = display.o

TARGET     = myapp

#利用我们准备好的各种变量定义规则

all:$(TARGET)

$(TARGET):$(OBJS)

        $(AR) -rv $@ $(OBJS)

%.o:%.c

        $(CC) -c $(CFLAGS) $< -o $@

#不要忘记清除中间文件,目标文件,子目录文件

clean:

      -$(RM) *.o $(TARGET)

其实Makefile中的CC,CFLAGS,LIBS等没有什么区别,他们的性质的都是一样的,就是变量。只是我对他们的叫法不一样而已,我分别叫他们为:命令变量,参数变量,局部变量;这样只是为了方便记忆

        这里只是一个简单的makefile,如果你要做一个大型的项目,上百个的源文件,那么就不是这么简单了,最好的做法可能你就应该把make分成几个function.mak这样的子makefile文件,这样便于管理,更多的使用makefile中的内置函数了。

        我还没有检测过这个Makefile,等我空了我会检测一下的


linux makefile 一些用法 Makefilear 用法   创建静态库。a文件。用C/C++开发程序时经常用到,但我很少单独在命令行中使用ar命令,一般写在makefile中,有时也会在shell脚 本中用到。关于Linux下的库文件、静态库、动态库以及怎样创建和使用等相关知识,参见本文后面的相关资料【3】《关于Linux静态库和动态库的分析》。   常用参数   格式:ar rcs libxxx.a xx1.o xx2.o   参数r:在库中插入模块(替换)。当插入的模块名已经在库中存在,则替换同名的模块。如果若干模块中有一.. 阅读详情

相关推荐

makefilear命令压缩文件 各自简单的区别

1. Makefile是一个自动化构建工具,主要用于编译、链接和打包程序。而ar命令是GNU二进制工具包(GNU Binutils)中的一个成员,主要用于创建、修改、提取归档文件。2. Makefile可以管理多个源文件、头文件和库文件,以及它们的依赖关系。而ar命令主要用于处理静态库和归档文件,如.a和.tar.gz等。4. Makefile可以与其他构建工具(如CMake、Autotools等)结合使用,以实现更复杂的构建过程。# 编译源文件并生成目标文件(.o)# 创建一个静态库(.a)

weixin_42242420的博客 753

Makefile知识点分析

Makefile详细介绍

yjlyyj的博客 468

makefilear命令压缩文件 各自有什么区别

1. Makefile是一个自动化构建工具,主要用于编译、链接和打包程序。而ar命令是GNU二进制工具包(GNU Binutils)中的一个成员,主要用于创建、修改、提取归档文件。2. Makefile可以管理多个源文件、头文件和库文件,以及它们的依赖关系。而ar命令主要用于处理静态库和归档文件,如.a和.tar.gz等。4. Makefile可以与其他构建工具(如CMake、Autotools等)结合使用,以实现更复杂的构建过程。# 编译源文件并生成目标文件(.o)# 创建一个静态库(.a)

weixin_42242420的博客 794

深入理解Makefile

前面我们声明的BUILDDIR就是一个自定义变量,要注意的是,如果声明了一个和默认变量一样的变量就会覆盖默认变量,这也给我们提供了一个改变默认规则的入口。= 延迟赋值,在Makefile运行时才会被赋值:= 立即赋值,立即赋值是在真正运行前就会被赋值?= 空赋值,如果变量没有设置过才会被赋值+= 追加赋值,可以理解为字符串的加操作延迟赋值指的是在Makefile运行时再赋值。

a410974689的博客 1726

makefile简单入门

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

超越 1343

makefile 获取路径_如何获取Makefile本身的完整路径和目录?

makefile 获取路径How to get the full path and directory of a Makefile itself like finding Bash script’s own path? 如何获得Makefile本身的完整路径和目录,例如查找Bash脚本自己的路径 ? This 2 lines in Makefile get the full path and d...

cuma2369的博客 6478

自己写一个简单通用的Makefile

一.makefile的作用           Makefile是用于自动编译和链接的,一个工程有很多文件组成,每一个文件的改变都会导致工程的重新链接,但是不是所有的文件都需要重新编译,Makefile中记录有文件的信 息,在make时会决定在链接的时候需要重新编译哪些文件。Makefile的宗旨就是:让编译器知道要编译一个文件需要依赖其他的哪些文件。当那些依赖文件有了改变,编译器会自动发现最终

阳光玻璃杯 7399

Linux | makefile简单教程 | Makefile的工作原理

Makefile带来的好处就是——自动化编译。一旦写好,只需要一个make命令,整个工程就完成自动化编译,极大提高了软件开发的效率; make是一个命令工具,是一个解释Makefile中指令的命令工具,一般来说,大多数的IDE都有这个命令,比如:Delphi的make,visual C++的make,linux下GNU的make。可见,Makefile都成为了一种在工程方面的编译方法。 make是一个命令,Makefile是一个文件,两个搭配使用,完成项目自动化构建。

2301_78131481的博客 1682

makefile 简单入门

makefile入门

technologyleader的专栏 464

简单而又完整makefile

刚开始学习makefile是一个痛苦的过程,从杂乱无章的规则到一个简单makefile再到一个系统化的makefile不是一蹴而就的事情。今天我就写一个简单的,规范的(相对而言),功能也算齐全的Makefile。适合于初学者的makefile。希望对新加入linux的同学们有用;一,源文件准备       假设在项目文件夹(PName)中我们有源文件:main.c com1.c

Tody Guo的专栏 4141

简单了解makefile

简单了解makefile制作makefilemain.cmytool1.cmytool1.hmytool2.cmytool2.hMakefile简单makefile生成中间文件的makefile测试:1. Makefile中交换main.o与mytool1.o之间的位置2. 修改makefile第一条关系makefile执行顺序的理解 制作makefile 如何编写makefile gcc/g++与makefile makefile介绍 如何写好一个makefile main.c #include "

LittleSeedling的博客 616

Makefile简单总结

目录   一、引入 二、Makefile简介 三、Makefile基本结构 四、简单Makefile实现 参考文章 一、引入 比如我们需要在linux中运行一个test.c文件,shell命令的常见方法是: 1.进入所在目录,编译文件中已有的c文件test.c. gcc test.c -o test 2.编译完成,生成了名为test的可执行文件,直接运行 ./test...

miner_zhu的博客 378

makefile 学习(5)完整makefile模板

这里报错了,因为缺少了cuda的库文件,下面是查看自己cuda版本和找到在哪里的指令,以我的CUDA11.7为例, 去到目录下看看有什么库文件,我们当前需要一个cudaruntime的头文件。这里定义的名称参数 workspace 和 binary 是用来指定工作空间和生成的可执行文件名称的。在这个 Makefile 中,表示生成的可执行文件的名称。这些参数可以在 Makefile 中的其它规则中使用,例如在。表示的是工作空间的目录名称,来看看最后要完成的工程目录。

@bangbang的博客 637

Makefile简单介绍

Makefile 介绍Makefile文件的作用是告诉make工具需要如何去编译和链接程序,在需要编译工程时只需要一个make命令即可,避免了每次编译都要重新输入完整命令的麻烦,大大提高了效率,也减少了出错率。make命令的规则是: - 如果这个工程没有编译过,则把所有的源文件进行编译链接 - 如果工程已经编译过,但是之后修改了其中的几个.c文件,那么只需要编译那些被修改的文件,并链接目标程

六炅的专栏 568

初玩Makefile与Go项目中Makefile简单使用

1 回顾程序的编译和链接流程 1.1 一个C语言源文件变为可执行程序的过程 简单来讲,源代码文件一般由程序员使用高级计算机语言(C、Go、Java、C++等)进行编写,不同的语言有不同的文件后缀名,但是他们的共同点就是他们都是程序的源文件,这些文件(一个或多个)需要进行编译和链接后生成可直接运行的程序,才能真正的被运行。 当然有些编程语言并没有这种机制,这种语言一般为解释执行型的语言,比如Java,以及解析型的脚本语言,比如Python。拥有这种机制的语言一般为编译性语言,比如经典的C语言。 1.2 程序

做兴趣使然的Hero 2707

Makefile文件:Makefile介绍

本文介绍Makefile的一些基本概念以及简单的用法。本文所用的编译器是Hightec tricore v4.9.1.0。 文章目录1 Makefile的作用2 Makefile的规则3 一个简单Makefile3.1 帮助文档中的例子3.2 例程1:一个简单Makefile 1 Makefile的作用 简单来说,Makefile的作用是告诉make如何编译和链接程序。我们在Eclipse界面中写好代码后,会点击一下rebuild按钮来将工程重新编译和链接。这背后就是通过Makefile来实现的。本文博

u013288925的博客 2847

Makefile 简单实例

文章目录makefile 命令规则忽略命令出错自动化变量指定伪目标简单示例 makefile 命令规则 target… : prerequisites … command … … ------------------------------------------------------------------------------- target也就是一个目标文件,可以是Object File,也可以是执行文件。还可以是一个标签(Label),对于标签这种特性,在后续的“伪目标”章节中会有叙述。 pre

xnxygxp的博客 668

[makefile]一个完整makefile

最终目标:只需make根目录下的makefile文件,即可编译所有c文件,包括子目录下的。 意义:自动化编译行为,以后编译自己的c文件时可把这些makefile文件直接复制到相应目录即可方便编译出所有文件。这些makefile文件是通用的,只需根据自己的工程情况改动少许内容即可。 总体思路是: 1.把目标文件编译到debug文件夹下的obj目录下,把最终的可执行文件放在debug文件夹下的b...

natual177的博客 465

简单而又完整Makefile

刚开始学习makefile是一个痛苦的过程,从杂乱无章的规则到一个简单makefile再到一个系统化的makefile不是一蹴而就的事情。今天我就写一个简单的,规范的(相对而言),功能也算齐全的Makefile。适合于初学者的makefile。希望对新加入linux的同学们有用; 一,源文件准备          假设在项目文件夹(PName)中我们有源文件:main.c com1.

Season@HangZhou 专栏 988
上一篇: 一个通用的Makefile模板-转
下一篇: Windows下C++多线程同步与互斥简单运用-转
xp5xp6
博客等级 码龄11年 99粉丝 103原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值