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. 在DataColumn.Expression把DateTime转换成String的问题

    我在使用MySql5.1的数据库中,使用winForm的DataGridView要把数据库中全称DateTime格式,转换成Date格式,就是把日期时间转换成日期,不要时间.如‘2013-07-08 ...

  2. 从零开始的全栈工程师——js篇(cookie)

    Cookie是由服务器端生成,发送给User-Agent,浏览器会将Cookie的key/value保存到某个目录下的文本文件内,下次请求同一网站时就发送该Cookie给服务器,对cookie知识感兴 ...

  3. MongoDB之mongodb.cnf配置

    # mongodb3.2.1 的主配置文件,将此文件放置于 mongodb3.2.1/bin 目录下 # hapday 2016-01-27-16:55 start # 数据文件存放目录 dbpath ...

  4. centos7服务器搭建javaweb运行环境及代码部署

    之前在一直在学习java web终于写完了第一个小demo,于是在阿里云上买了一个服务器,开始了配置服务器环境的踩坑之旅.... ps:本文不讨论服务器配置的具体步骤,网上都很多,按部就班就是,本文主 ...

  5. [学习心得][Introduction to ASP.NET Core 1.0]4-1 Creating a Form

    原视频地址https://mva.microsoft.com/en-US/training-courses/introduction-to-asp-net-core-1-0-16841?l=eYlqd ...

  6. Java设计模式—中介者模式

    中介者模式是一种并不常用的模式,在此简单阐述阐述. 定义:用一个中介者对象封装一系列的对象交互,中介者使各对象不需要显示地相互作用,从而使耦合松散,而且可以独立地改变它们之间的交互. 类型:行为类模式 ...

  7. 第四章 T-SQL编程

    1.前言->此T-SQL编程是基于sql server开发环境->关键字:T-SQL编程:游标:视图和索引 2.T-SQL编程基础->标识符:常规标识符必须以汉字.字母.下划线_.@ ...

  8. 解析Excel文件 Apache POI框架使用

    本文整理了,使用Apache POI 框架解析.读取Excel文件,过程中,程序代码出现的一些问题,并解决 1..xls 和 .xlsx 我们知道Excel文档,在Windows下,分为Excel20 ...

  9. centos系统下安装Nginx

    参考链接 CentOS 7 用 yum 安装 Nginx Nginx负载均衡配置 下载并安装 #使用以下命令 sudo yum install -y nginx #sudo表示使用管理员权限运行命令 ...

  10. PostgresQL中的NUlls first/last功能

    Nulls first/last功能简介Nulls first/last功能主要用于order by排序子句中,影响空值Null在排序结果中的位置.简单来说,Nulls first表示Null值在排序 ...