Makefile中一个项由以下结构所组成:
target: dependency_files
command
比如,有两个文件hello.c,hello.h,创建的目标体为hello.o,执行命令是gcc -c hello.c,Makefile就可以这样写:
hello.o: hello.c hello.h
gcc -c hello.c
一个稍微复杂一点而的例子
sunq: kang.o yul.o
gcc kang.o bar.o -o myprog
kang.o : kang.c kang.h head.h
gcc -Wall -O -g -c kang.c -o kang.o
yul.o : bar.c head.h
gcc -Wall -O -g -c yul.c -o yul.o
这里面有有3个目标体,分别为sunq,kang.o,yul.o,如果用户使用命令“make sunq”,则make找到目标体sunq开始执行。在执行时,如果有了target,并且他的修改时间比所依赖的文件更新的话,target是不会重新生成的。
Makefile变量:
Makefile有两种定义变量方式,一种是递归展开方式(在引用的时候替换,如果还包含其他变量则递归展开),另一种是简单展开方式(在定义的时候展开,且只展开一次)
递归展开的格式:VAR = var
简单展开的格式:VAR := var
make使用变量的方式$(VAR)
我们来使用变量来改造一下上面的例子
OBJS = kang.o yul.o
CC = gcc
CFLAGS = -Wall -O -g
sunq: $(OBJS)
$(CC) $(OBJS) -o myprog
kang.o : kang.c kang.h head.h
$(CC) $(CFLAGS) -c kang.c -o kang.o
yul.o : bar.c head.h
$(CC) $(CFLAGS) -c yul.c -o yul.o
Makefile中常见的自动变量
变量 |
含义 |
$* |
不包含扩展名的目标文件名称 |
$@ |
目标文件的完整名称 |
$< |
第一个依赖文件的名称 |
$+ |
所有依赖的文件,以空格间隔 |
$^ |
所有不重复的依赖文件,一空格间隔 |
所以在上例中,Makefile的动作可以这样写
$(CC) $(CFLAGS) -c $< -o $@
分享到:
相关推荐
这份"make笔记.zip"可能包含了关于如何使用`make`的详细教程或者参考材料。 `Make`的核心概念是`目标`和`依赖关系`。在`Makefile`中,每个规则定义了一个目标(通常是可执行文件或库),以及一组依赖文件(如源代码...
### MAKE 学习笔记知识点详解 #### 一、Make 的基本概念 - **Make 的作用**:`Make` 是一种自动化构建工具,主要用于管理程序的编译过程,它通过读取一个名为 `Makefile` 或 `makefile` 的文件来决定如何编译和...
这个“make学习笔记”压缩包包含了关于`make`和Makefile的详细资料,对于想要深入理解这个工具的用户来说非常有价值。 首先,让我们详细了解一下`make`。`make`是用于自动化构建项目的命令行工具,它能够跟踪源代码...
### Blender 2.79与MakeHuman -1.1.1 使用笔记 #### 一、MakeHuman -1.1.1 软件介绍及应用 **MakeHuman** 是一款强大的开源人体建模软件,它可以帮助用户快速创建高质量的人体模型,并支持多种格式的导出。版本 **...
OpenWrt的学习笔记主要涵盖了对通用固件的make-menuconfig配置方法。 make-menuconfig是一个用于配置OpenWrt固件的工具,它提供了一个基于文本的菜单界面,允许用户选择需要编译进固件的组件和功能。在OpenWrt的...
编写良好的Makefile可以大大提高开发效率,通过make命令即可实现快速构建和测试。 3. **Shell脚本**:Shell脚本是Linux系统中的批处理程序,使用Bash或其他Shell解释器执行。编写Shell脚本可以自动化日常任务,提高...
8. **GNU Make笔记**: Makefile是构建项目的关键,它定义了源文件和目标文件之间的依赖关系。学习编写和使用Makefile,可以使构建过程自动化,提高开发效率。 9. **如何更好地了解C**: 深入理解C语言的关键在于实践...
【绿色版makecode】是一款专为iPad设计的实时投屏软件,它允许用户通过笔记本电脑将内容便捷地投影到大屏幕上。在IT领域,这样的工具对于教育、演示和协作环境非常有用,因为它使得观众可以清晰地看到iPad上的操作,...
YC强调“Make something people want”(创造人们需要的东西),这要求创业者深入了解用户需求,提供具有价值的产品或服务。笔记中详细解读了如何通过调研、访谈等方式找到真实问题,并以此为基础构建解决方案。 二...
angsd: 用于分析NGS数据的程序。... make笔记我已经切换到使用htslib来解析单次读取(以便进行CRAM读取,同时避免编写自己的CRAM解析器)。 我仍在使用自己的读取池。 因此,用户还应该下载并安装htslib。程序有论文
内容概要:压缩包中含有Java中的集合框架Markdown全系列笔记,包括配图 能学到什么:在学习Java的朋友,可以从本文教程中学习到Java中最常用的集合框架,HashMap,ArrayList,HashSet等,同时又基于代码有一定层次的...
VNote 的特性包括: 使用 语法高亮 而不是实时预览来提供舒适的编辑体验; 编辑时 实时原地预览图片链接; 编辑时,代码块支持语法高亮; 支持 Mermaid 流程图,MathJax 数学公式; 支持 Vim 模式;...
《Effective Modern C++:改善C++11和C++14的42个具体做法(影印版)(英文版)》中包括以下主题:剖析花括号初始化、noexcept规范、完美转发、智能指针make函数的优缺点;讲解std∷move,std∷forward,rvalue引用和全局...
### Qt学习笔记知识点详解 #### 一、从Hello Qt开始 **知识点1:Qt程序的基本结构** - **头文件引入**: - 第1行和第2行代码中,`#include <QApplication>` 和 `#include <QLabel>` 是引入Qt中的两个类:`...
- **The Pulse™智能笔**:一种可以记录音频并关联笔记的智能笔,适合会议记录或创意笔记管理。 ### 知识点四:案例研究与访谈 - **“Rocket Men”报告**:作者Charles Platt采访了新兴私人太空行业的制造商们,...
sklearn笔记 sklearn是Python中一个...在这篇笔记中,我们学习了如何使用make_blobs函数生成聚类数据集,并使用matplotlib库对数据进行可视化。此外,我们还学习了make_blobs函数的参数和sklearn.datasets模块的功能。
根据提供的信息,我们可以总结出这份文档是关于Go语言学习笔记的部分内容,主要涵盖了Go语言的基础概念、语法结构、数据类型以及并发模型等关键知识点。以下是对这些知识点的详细解析: ### Go语言概述 Go(也称作...
韦东山视频学习笔记 - U-boot 学习笔记 韦东山老师的 Linux 视频学习笔记,涵盖了 U-boot 的学习笔记,本节笔记将详细介绍 U-boot 的生成、配置、编译和烧写过程。 U-boot 生成 U-boot 是一个开源的 Bootloader ...
HP笔记本BIOS重刷工具 To use this system, select your supported hp probook/... use the 'Make All' button to create all posible keys. run the shotgun.bat file created to run through all the keys quickly.