Makefile (3) 基本语法和使用
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) 基本语法和使用的更多相关文章
- Makefile规则③规则语法、依赖、通配符、目录搜寻、目标
规则语法 通常规则的语法格式如下: TARGETS : PREREQUISITES COMMAND ... 或者: TARGETS : PREREQUISITES ; COMMAND COMMAND ...
- 详解Makefile 函数的语法与使用
使用函数: 在Makefile中可以使用函数来处理变量,从而让我们的命令或是规则更为的灵活和具有智能.make所支持的函数也不算很多,不过已经足够我们的操作了.函数调用后,函数的返回值可以当做变量来使 ...
- 详解Makefile 函数的语法与使用 (转)
使用函数: 在Makefile中可以使用函数来处理变量,从而让我们的命令或是规则更为的灵活和具有智能.make所支持的函数也不算很多,不过已经足够我们的操作了.函数调用后,函数的返回值可以当做变量来使 ...
- 【 MAKEFILE 编程基础之四】详解MAKEFILE 函数的语法与使用!
本站文章均为 李华明Himi 原创,转载务必在明显处注明: 转载自[黑米GameDev街区] 原文链接: http://www.himigame.com/gcc-makefile/771.html ...
- [转]Windows平台下Makefile学习笔记
Windows平台下Makefile学习笔记(一) 作者:朱金灿 来源:http://blog.csdn.net/clever101 决心学习Makefile,一方面是为了解决编译开源代码时需要跨编译 ...
- make命令以及makefile
make命令以及makefile使用RCS与CVS进行源代码控制编写手册页使用patch与tar发布软件开发环境 多源代码的问题 当我们编写小程序时,许多人都是简单的在编辑后通过重新编译所有的文件重新 ...
- 转载-------makefile 使用总结
转载自:http://www.cnblogs.com/wang_yb/p/3990952.html 1. Makefile 简介 Makefile 是和 make 命令一起配合使用的. 很多大型项目的 ...
- Linux内核Makefile文件(翻译自内核手册)
--译自Linux3.9.5 Kernel Makefiles(内核目录documention/kbuild/makefiles.txt) kbuild(kernel build) 内核编译器 Thi ...
- (二)我的Makefile学习冲动&&编译过程概述
前言 一 年轻的冲动 二 学习曲线 1 Makefile基本语法 2 bash基础 3 world 三 编译过程概述 1 主机预装工具 2 编译host工具 3 编译交叉工具链 4 编译内核模块 5 ...
随机推荐
- Spring Data JPA 事务
Spring Data JPA 是 Spring 基于 ORM 框架.JPA 规范的基础上封装的一套 JPA 应用框架,可使开发者用极简的代码即可实现对数据的访问和操作.它提供了包括增删改查等在内的常 ...
- TX Text Control X10新特性之图像占位符合并
文档处理控件TX Text Control即将发布的X10版本,将升级重点还是放到了其比较优势的流式布局报表设计和生成上.慧都获得了来自其开发商Text Control GmbH公司的一手资料,迫不及 ...
- List之Sort使用
void TestListSort(){ List<string> st = new List<string> (); st.Add ("abcd"); s ...
- Javascript基础--运算符与表达式
一.运算符 1.运算符分类: 按功能:算术运算符:+.-.*./.%.++.-- 例:12+12-11+5*6+20/5+5%2+(5%-2)+(-5++2)+(a++)+(++a)+(--a)+(a ...
- python socket实现多个连接
socket实现多个连接 前戏很重要~~ 在实现多个连接之前,先实现下多次发送和接收数据. 如果要多次接收数据,那么在服务器端的接收和客户端的发送部分就必须使用循环. 以下代码在python3.5下运 ...
- 责任链模式(ChainOfResponsibiliby、Filter)
Request 类: package com.demo; public class Request { private String requestStr; public String getRequ ...
- sharepoint2010列表的分页实现迅雷样式效果
利用ListItemCollectionPosition和AspNetPage分页控件实现,效果图如下: 后台分页代码如下: #region 私有方法 /// <summary> /// ...
- To my dear friends in SFAE
To my dear friends in SFAE, 这不是farewell,我还在西门子大家庭.2018年1月份我会转到SLC MCBU.在SFAE十年,一些敢想,唠叨唠叨~ 十年弹指一挥间.记得 ...
- CRUD全栈式编程架构之更精简的设计
精简的程度 ViewModel精简 服务精简 控制器精简 Index.cshmtl精简 AddOrEdit.cshtml精简 效果:最精简的情况下,只需要写Entity这一个数据库实体然后加上一些简单 ...
- soap使用xml调用webapi后返回xml信息进行JSON转换处理,以顺丰查询接口为例
expressUrl = string.Format(可以卸载配置文件的域名URL + "/bsp-oisp/ws/expressService"); StringBuilder ...