make是用来管理一个工程项目的工具 .

Makefile就是这个项目文件 .

1.Makefile 是由若干条规则组成的,每个规则的语法如下所示 :

  #规则
targets: prerequisites
command
 #举例 main.c func1.c
hello: main.o func1.o
gcc main.o func1.o -o hello main.o: main.c
gcc -c main.c
func1.o: func1.c
gcc -c func1.c

2.makefile的时间戳

  对于已经编译过一次的工程,如果没有对源文件进行修改,目标文件是不会重复编译的,这样编译效率比较高.

  也就是说,如果目标文件和依赖文件的时间戳是一样的,就不会重新编译,

  如果目标文件的时间戳比依赖文件的时间戳旧,就会重新编译.

3.伪目标

  对于工程的清理, 需要写一个clean功能,这种类似的功能, 不需要依赖文件,这种命令 称作 伪目标.

 #伪目标
# .PHONY: xxx

.PHONY: clean
clean:
rm -rf *.o hello .PHONY: install
install:
cp hello /usr/bin .PHONY: uninstall
uninstall:
rm /usr/bin/hello

4.makefile 的变量

  .用户自定义变量
.预定义变量
.自动变量
  #用户自定义变量 --宏
OBJ = main.o func1.o ...
hello : $(OBJ)
gcc $(OBJ) -o hello #预定义变量
AR --> ar
CC --> 编译器
ARFLAGS --> 库编译选项
CFLAGS --> C编译器选项
#举例 CFLAGS = -g -c
gcc $(CFLAGS) func.c #自动变量
$* --> 不包含扩展名的目标文件名称 #main.o : main.c $* 表示main.o 中的main
$< --> 表示第一个依赖文件的名称
$? --> 所有时间戳比目标文件晚的依赖文件
$@ --> 目标文件的完成名称
$^ --> 所有不重复的依赖文件
# hello : main.o func1.o
# $(CC) $^ -o $@
 

5.makefile 条件判断

  #条件判断不能用tab 打头
hello: main.o func1.o
ifeq ($(CC),gcc)
gcc $^ -o $@
else
$(CC) $^ -o $@
endif

6.Makefile的嵌套和引用

  一个工程是由一层一层Makefile的嵌套组成的 .每个Makefile文件负责管理不同的部分,然后通过嵌套和引用,来管理整个工程的源码 .

  #包含
include proc/makefile

#嵌套
subsystem:
$(MAKE) -C subdir

7.makefile 管理命令

-C dir 执行指定文件夹下面的makefile
-f file 读入当前文件夹下的file 为 Makefile
-i 忽略所有命令执行的错误
-I dir 指定被包含(include)的Makefile 的路径
  -C 用于迭代,
/-
|-Makefile
|-srcA
| |-xx.c
| |-Makefile
|
|-srcB
|-xx.c
|-Makefile #在根目录下的Makefile
$(MAKE) -C srcA
$(MAKE) -C srcB

8.用伪目标生成多个文件

 .PHONY: all
all: tar1 tar2 tar3 tar1: tar1.o
$(CC) $^ -o $@

tar2: tar2.o
$(CC) $^ -o $@ tar3: tar3.o
$(CC) $^ -o $@

Makefile (3) 基本语法和使用的更多相关文章

  1. Makefile规则③规则语法、依赖、通配符、目录搜寻、目标

    规则语法 通常规则的语法格式如下: TARGETS : PREREQUISITES COMMAND ... 或者: TARGETS : PREREQUISITES ; COMMAND COMMAND ...

  2. 详解Makefile 函数的语法与使用

    使用函数: 在Makefile中可以使用函数来处理变量,从而让我们的命令或是规则更为的灵活和具有智能.make所支持的函数也不算很多,不过已经足够我们的操作了.函数调用后,函数的返回值可以当做变量来使 ...

  3. 详解Makefile 函数的语法与使用 (转)

    使用函数: 在Makefile中可以使用函数来处理变量,从而让我们的命令或是规则更为的灵活和具有智能.make所支持的函数也不算很多,不过已经足够我们的操作了.函数调用后,函数的返回值可以当做变量来使 ...

  4. 【 MAKEFILE 编程基础之四】详解MAKEFILE 函数的语法与使用!

    本站文章均为 李华明Himi 原创,转载务必在明显处注明: 转载自[黑米GameDev街区] 原文链接: http://www.himigame.com/gcc-makefile/771.html   ...

  5. [转]Windows平台下Makefile学习笔记

    Windows平台下Makefile学习笔记(一) 作者:朱金灿 来源:http://blog.csdn.net/clever101 决心学习Makefile,一方面是为了解决编译开源代码时需要跨编译 ...

  6. make命令以及makefile

    make命令以及makefile使用RCS与CVS进行源代码控制编写手册页使用patch与tar发布软件开发环境 多源代码的问题 当我们编写小程序时,许多人都是简单的在编辑后通过重新编译所有的文件重新 ...

  7. 转载-------makefile 使用总结

    转载自:http://www.cnblogs.com/wang_yb/p/3990952.html 1. Makefile 简介 Makefile 是和 make 命令一起配合使用的. 很多大型项目的 ...

  8. Linux内核Makefile文件(翻译自内核手册)

    --译自Linux3.9.5 Kernel Makefiles(内核目录documention/kbuild/makefiles.txt) kbuild(kernel build) 内核编译器 Thi ...

  9. (二)我的Makefile学习冲动&&编译过程概述

    前言 一 年轻的冲动 二 学习曲线 1 Makefile基本语法 2 bash基础 3 world 三 编译过程概述 1 主机预装工具 2 编译host工具 3 编译交叉工具链 4 编译内核模块 5 ...

随机推荐

  1. 为什么要使用markdown?

    markdown是什么? markdown是一种标记语言,它不是编程语言 为什么要使用markdown? markdown可以使用任何文本编辑器编写和查看 markdown编写的文件可以转化为html ...

  2. 企业工商营业执照副本模板PSD源文件素材下载

    企业工商营业执照副本PSD模板下载地址: http://www.qijieworld.com/thread-1911181-1-1.html 模板为psd格式内容可编辑修改,需使用 Photoshop ...

  3. JS之获取子节点

    在JS中获取子节点有以下几种方法: firstElementChild.firstChild.childNodes和children 我们通过一个例子来分析这几种方法的区别(获取div下的p标签) 输 ...

  4. What is mobile platform?

    高屋建瓴 From Up to Down Outside into inside The Internet Of Things. http://wenku.baidu.com/view/5cdc026 ...

  5. ArcSDE空间数据库中SDE用户使用探讨(转)

    ArcSDE作为空间数据库解决方案,应用非常广泛,本短文将尝试描述SDE的工作机制,简要说明空间数据 库中SDE用户的使用方法. ArcSDE如何工作 ArcSDE属于中间件技术,其本身并不能够存储空 ...

  6. org.springframework.beans.factory.BeanNotOfRequiredTypeException

    写一个代码:关于Spring Bean的装配.基于annotation实现的范例代码. 出现了错误: 十一月 14, 2018 4:51:01 下午 org.springframework.conte ...

  7. Sql_Server中如何判断表中某字段是否存在

    --比如说要判断表A中的字段C是否存在两个方法: 一, IF EXISTS ( SELECT 1 FROM SYSOBJECTS T1 INNER JOIN SYSCOLUMNS T2 ON T1.I ...

  8. 使用QJM实现HDFS的HA配置

    使用QJM实现HDFS的HA配置 1.背景 hadoop 2.0.0之前,namenode存在单点故障问题(SPOF,single point of failure),如果主机或进程不可用时,整个集群 ...

  9. April 11 2017 Week 15 Tuesday

    Love is hard to get into, but harder to get out of. 相爱不易,相忘更难. The past are hurt, but I think we can ...

  10. 硬件-ESP32S模块资料

    1.产品概述 ESP-32S WiFi 模块是由安信可科技自主设计研发,该模块核心处理器 ESP32提供了一套完整的802.11 b/g/n/e/i 无线局域网(WLAN)和蓝牙4.2解决方案,具有最 ...