编写通用Makefile

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

    近期在看韦东山的数码相框视频,有讲到怎么写一个通用的makefile,遂赶紧记录下来。废话不多说,下面进入正题。

1)程序的编译过程
        4个步骤:预处理,编译,汇编,链接.
      预处理:  检测语法错误,把头文件包含进来,宏展开.
      编译:把.  c文件转换成汇编文件.s
     汇编:把.  s文件转换成二进制文件.o
     链接:.      .o文件+库文件 =可执行程序

    gcc -v -o hello hello.c  就可观看到编译的细节.

2)Makefile

 核心:规则
 目标:依赖1 依赖2
 命令 
 命令执行的条件:
 i. "依赖"文件 比 "目标"文件 新
 ii.没有"目标"这个文件

 假设我们包含的文件要用到:a.c b.c a.h
1>  来看第一个makefile:

test:a.c b.c a.h
	gcc -o test a.c b.c
</pre>对于a.c: 预处理、编译、汇编对于b.c:预处理、编译、汇编最后链接优点:命令简单缺点:如果文件很多,即使你只修改了一个文件,但是所有的文件文件都要重新"预处理、编译、汇编"      效率低<p>2>第二个Makefile</p><p></p><pre code_snippet_id="277584" snippet_file_name="blog_20140406_1_3955355" name="code" class="cpp">tes
通用Makefile编写和在项目工程中使用Makefile(包括动态库、静态库的链接、整个工程联合编译) 一、通用Makefile文件的编写        (1)、什么是通用Makefile?                     这里的通用Makefile指的是它既能编译可执行文件、也能编译动态链接库、又能编译静态库,只需要更改很少的内容即可。        (2)、写一个通用Makefile #-------------------------配置区域------ 阅读详情

相关推荐

通用Makefile

Makefile通用万能,很好用,我一直用它。共享给大家。

通用makefile编写

编译过程:预处理(#),编译(.c->.S),汇编(.S->.o),链接(.o+库文件=执行文件) Makefile编译链接文件 核心:规则     目标:依赖        命令 命令执行的条件: i. "依赖"文件 比 "目标"文件新 ii.没有"目标"这个文件 ...

qq_43604517的博客 529

韦东山通用Makefile文件

本程序的Makefile分为3类: 1. 顶层目录的Makefile 2. 顶层目录的Makefile.build 3. 各级子目录的Makefile 一、各级子目录的Makefile: 它最简单,形式如下: EXTRA_CFLAGS := CFLAGS_file.o := obj-y += file.o obj-y += subdir/ "obj-y += file.o" 表示把当前目录下的file.c编进程序里, "obj-y += subdir/" 表示要进入subdir这个子目录下去寻找文件来编进程序里,是哪些文件由subdir目录下的Makefile决定。 "EXTRA_CFLAGS", 它给当前目录下的所有文件(不含其下的子目录)设置额外的编译选项, 可以不设置 "CFLAGS_xxx.o", 它给当前目录下的xxx.c设置它自己的编译选项, 可以不设置 注意: 1. "subdir/"中的斜杠"/"不可省略 2. 顶层Makefile中的CFLAGS在编译任意一个.c文件时都会使用 3. CFLAGS EXTRA_CFLAGS CFLAGS_xxx.o 三者组成xxx.c的编译选项 二、顶层目录的Makefile: 它除了定义obj-y来指定根目录下要编进程序去的文件、子目录外, 主要是定义工具链前缀CROSS_COMPILE, 定义编译参数CFLAGS, 定义链接参数LDFLAGS, 这些参数就是文件中用export导出的各变量。 三、顶层目录的Makefile.build: 这是最复杂的部分,它的功能就是把某个目录及它的所有子目录中、需要编进程序去的文件都编译出来,打包为built-in.o 详细的讲解请看视频。 四、怎么使用这套Makefile: 1.把顶层Makefile, Makefile.build放入程序的顶层目录 在各自子目录创建一个空白的Makefile 2.确定编译哪些源文件 修改顶层目录和各自子目录Makefile的obj-y : obj-y += xxx.o obj-y += yyy/ 这表示要编译当前目录下的xxx.c, 要编译当前目录下的yyy子目录 3. 确定编译选项、链接选项 修改顶层目录Makefile的CFLAGS,这是编译所有.c文件时都要用的编译选项; 修改顶层目录Makefile的LDFLAGS,这是链接最后的应用程序时的链接选项; 修改各自子目录下的Makefile: "EXTRA_CFLAGS", 它给当前目录下的所有文件(不含其下的子目录)设置额外的编译选项, 可以不设置 "CFLAGS_xxx.o", 它给当前目录下的xxx.c设置它自己的编译选项, 可以不设置 4. 使用哪个编译器? 修改顶层目录Makefile的CROSS_COMPILE, 用来指定工具链的前缀(比如arm-linux-) 5. 确定应用程序的名字: 修改顶层目录Makefile的TARGET, 这是用来指定编译出来的程序的名字 6. 执行"make"来编译,执行"make clean"来清除,执行"make distclean"来彻底清除

通用Makefile编写

1框架 1)顶层目录的Makefile 2)顶层目录的Makefile.build 3)各级子目录的Makefile 2概述 1.各级子目录的Makefile: 它最简单,形式如下: obj-y += file.o obj-y += subdir/ "obj-y += file.o"表示把当前目录下的file.c编进程序里, "obj-y += subdir/"表示要进入subdir这个子目录下去...

ComeOnMr博客 446

嵌入式Linux教程_韦东山手把手教你嵌入式Linux快速入门到精通

课程按篇章可分为5篇,单独的视频专栏观看:【第1篇】(IMX6ULL)新学习路线、视频介绍、资料下载、开发板基础操作【第1篇】(STM32MP157)新学习路线、视频介绍、资料下载、开发板基础操作【第2篇】Linux基本操作【第3篇】开发板使用手册【第4篇】嵌入式Linux应用开发基础知识【第5篇】嵌入式Linux驱动开发基础知识

一个通用makefile文件应该怎么写

目标文件名为demo#没有去掉符号表和调试信息的目标文件版本#map文件包含目标文件链接阶段的细节内容,通常包含全局符号,交叉引用和内存映射等信息#交叉编译工具链#C语言编译工具gcc#C++编译工具g++#GNU中用来将目标文件打包为静态链接库的工具#GNU链接器,用来将目标文件与库链接为可执行文件#GNU中的用来裁剪调试信息与符号表的工具#GNU中AR的子工具,用来为归档文件创建符号表索引,符号表文件可以让链#接器快速查找函数符号在相应对应文件的位置。

qq_40854508的博客 1158

编写通用Makefile

编写通用Makefile

Jiaying888168的博客 411

一个通用Makefile编写

我们在Linux环境下开发程序,少不了要自己编写Makefile,一个稍微大一些的工程下面都会包含很多.c的源文件。如果我们用gcc去一个一个编译每一个源文件的话,效率会低很多,但是如果我们可以写一个Makefile,那么只需要执行一个make就OK了,这样大大提高了开发效率。但是Makefile的语法规则众多,而且缺乏参考资料,对于初学者来说,写起来还是有一定的难度,往往令很多人望而生畏。下面我们介绍一个比较通用而且简洁的Makefile,大家只要对它稍作修改就可以用在你们自己的工程里了。

Move on the way of Embeded Linux 444

makefile常用函数以及通用makefile编写

对 list 中的每一个元素,取出来赋给 var,然后把 var 改为 text 所描述的形式。把 text 中符合 pattern 格式的内容,filter-out(过滤)出来、扔掉。寻找`text’中符合格式`pattern’的字,用`replacement’替换它们。把 text 中符合 pattern 格式的内容,filter(过滤)出来、留下来。`pattern’和`replacement’中可以使用通配符。pattern 所列出的文件是否存在,把存在的文件都列出来。

m0_61831106的博客 626

Makefile是什么?如何编写?怎么写能通用呢?

Makefile是什么?如何编写?怎么写能通用呢?   转载▼ 【from】 http://blog.sina.com.cn/s/blog_3f618d2501019u6v.html 什么是makefile?或许很多Winodws的程序员都不知道这个东西,因为那些 Windows的IDE都为你做了这个工作,但我觉得要作一个好的和professional的程序员,makefi

phoenixtree7的专栏 696

以freetype为例来编写通用Makefile文件

1、freetype的交叉编译 交叉编译就是在一个平台上生成另一个平台上可以执行的代码。 要进行交叉编译,需要在主机平台上安装对应的交叉编译工具链,然后使用这个交叉编译工具链对我们的源代码进行编译,最终生成在目标平台上可以允许的代码,最常见的交叉编译例子: 在Linux PC上,使用arm-linux-gcc编译器编译出在Linux ARM平台上运行的代码。 freetype库是一个完全开源、高质量且可移植的字体引擎,它提供统一的接口来访问多种字体文件,想要在Linux ARM平台上使用freetype库就

u014288396的博客 661

编写通用makefile(自己有点忘记了)

转载于: http://blog.csdn.net/ymangu666/article/details/23028747 近期在看韦东山的数码相框视频,有讲到怎么写一个通用makefile,遂赶紧记录下来。废话不多说,下面进入正题。 1)程序的编译过程 4个步骤:预处理,编译,汇编,链接. 预处理: 检测语法错误,把头文件包含进来,宏展开. 编译:...

weixin_30364325的博客 102

S5PV210通用Makefile文件编写记录

S5PV210通用Makefile文件编写记录 最近在学习S5PV210开发相关的知识,因为是入门一切都是新的,目前还是点灯阶段(哈哈哈哈),学习了rocky大佬讲的通用Makefile编写,感觉真的很好,写下来希望能帮助和我一样的刚入门的小白。 之前也了解了一点点的Makefile文件编写比如说LED灯的Makefile文件编写,一般情况下,我们在LED灯这节会看到Makefile...

chuomei5332的博客 1097
上一篇: 代码测试之内存越界
下一篇: arm 裸板驱动入门-LED
ymangu
博客等级 码龄16年 202粉丝 249原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值