1> 编译一个文件
2> 编译多个文件
3> 编译多个目录下的文件
4> inclue makefile
5> 使用规则
1>
target:depend
[tab]cmd
depnd:file
[tab]cmd
举例如下
test:main.o
[tab]gcc -o test main.o
main.o:main.c
[tab]gcc -o main.o -c main.c

2>
2.1 目标文件依赖多个文件

CC = gcc

#INC =  -I./include/
#LIBVAR = -lpthread
#LIBPATH = -L./lib #CFLAGS ?= -O2 -g OBJS := main.o
OBJS += add.o
OBJS += sub.o SRCS := main.c
SRCS += add.c
SRCS += sub.c
TARGET = test $(TARGET):$(OBJS)
$(CC) $(INC) $(CFLAG) -o $@ $^ $(LIBVAR) $(LIBPATH)
@echo "build success" $(OBJS):$(SRCS)
$(CC) $(INC) $(CFLAG) -c $^ $(LIBVAR) $(LIBPATH) clean:
rm -rf $(OBJS) $(TARGET) install:
@echo "do nothing"

2.2 生成多个目标文件,我们可使用伪目标

CC = gcc

#INC =  -I./include/
#LIBVAR = -lpthread
#LIBPATH = -L./lib
#CFLAGS ?= -O2 -g
#SRCS = OBJS := hello.o
OBJS += test.o TARGET = test hello all:$(TARGET)
@echo "success to build"
test:test.c
$(CC) $(INC) $(CFLAGS) -o $@ $^ $(LIBVAR) $(LIBPATH) hello:hello.c
$(CC) $(INC) $(CFLAGS) -o $@ $^ $(LIBVAR) $(LIBPATH) clean:
rm -rf $(OBJS) $(TARGET) install:
@echo "do nothing"

$@ 表示目标文件

$^ 表示所有依赖项

$< 表示第一个文件

简化makefile 如下:

CC = gcc

#INC =  -I./include/
#LIBVAR = -lpthread
#LIBPATH = -L./lib
#CFLAGS ?= -O2 -g
#SRCS = #wildcard对.c文件进行展开
SRCS = $(wildcard ./*.c) OBJS = $(patsubst %.c, %.o, $(SRCS)) #将SRCS中后缀.c替换成空,即可执行程序的名字与c名字相同
TARGET = $(patsubst %.c, %, $(SRCS)) all:$(TARGET)
@echo "success to build" $(TARGET):$(OBJS)
gcc $< -o $@ $(OBJS):$(SRCS)
gcc -c $< clean:
rm -rf $(OBJS) $(TARGET) install:
@echo "do nothing"

学习Makefile的更多相关文章

  1. 一个工程实例来学习 Makefile

    March 3, 2015 8:19 PM Makefile 文件的编写 学习前的准备 需要准备的工程目录结构如下: . ├── add │   ├── add_float.c │   ├── add ...

  2. 学习makefile与autoconfig笔记,持续更新

    main.c #include<stdio.h> #include"chen_print.h" int main(int argc , char * argv ){ c ...

  3. 学习makefile的一个工程示例

    前言 makefile推荐资料为陈皓的跟我一起写makefile,需要pdf资源的可以私我 正文 工程目录结构 ---include(放置头文件.h) ------student.h(Student类 ...

  4. [arm学习]makefile学习总结

    makefile不仅仅是一个命令的集合体,其中有一些规则是需要理解掌握的. 首先,了解makefile的规则: //-----------格式---------- 目标 : 依赖1,依赖2 (TAP键 ...

  5. 一个小例子学习makefile

    前言 makefile推荐资料为陈皓的跟我一起写makefile,需要pdf资源的可以私我 正文 目录结构 ---include ------student.h ---src ------studen ...

  6. 学习makefile 的网址

    http://www.ruanyifeng.com/blog/2015/02/make.html http://blog.csdn.net/ruglcc/article/details/7814546 ...

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

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

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

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

  9. 学习笔记:Makefile的ifeq逻辑或,逻辑与的变通实现

        (1)ifeq的用法 ifeq ($(变量名), 变量值 ) ........ else ifeq ($(..), ..) ......... else ......... endif (2) ...

随机推荐

  1. Java_Character类

      Character类用于对单字符进行操作. 常用的方法: System.out.println(Character.isDigit('1')); // true 判断是否是一个数字字符 Syste ...

  2. SSM(SpringMVC Spring Mybatis)框架整合搭建

    1.新建一个web工程. 2.首先看一下整体的框架结构: 3.将ssm框架搭建所需要的jar包复制到lib目录下 3.需要配置各个配置文件. 1)配置web.xml文件: <?xml versi ...

  3. spark DataFrame的创建几种方式和存储

    一. 从Spark2.0以上版本开始,Spark使用全新的SparkSession接口替代Spark1.6中的SQLContext及HiveContext接口来实现其对数据加载.转换.处理等功能.Sp ...

  4. Beta(1/7)

    鐵鍋燉腯鱻 项目:小鱼记账 团队成员 项目燃尽图 冲刺情况描述 站立式会议照片 各成员情况 团队成员 学号 姓名 git地址 博客地址 031602240 许郁杨 (组长) https://githu ...

  5. git彻底删除某个文件的全部log历史记录

    git filter-branch -f --tree-filter 'rm -rf vendor/gems' HEAD git push origin --force如果log历史较多 可能需要一点 ...

  6. django——会话追踪技术

    1.引言 1.1什么是会话追踪技术 会话是指一个终端用户(服务器)与交互系统(客户端)进行通讯的过程. 1.2 什么是会话跟踪 对同一个用户对服务器的连续的请求和接受响应的监视.(将用户与同一用户发出 ...

  7. World Finals 2018 感想

    垃圾比赛卡我读入卡我输出毁我青春.

  8. js实现数组去重的几种方法

    1.简单结构的数组,例如[1,2,3,3,4],使用es6提供的Set和Array.from Set:是一种新的数据结构,可以接收一个数组或者是类数组对象,自动去重其中的重复项目. 类数组对象:只包含 ...

  9. Linux bash基础特性一

    命令别名 alias cdnet=”cd /etc/sysconfig/network-scripts” 针对用户的别名: “~/.bashrc” 针对系统的别名:”/etc/bashrc” 重读配置 ...

  10. selenium3+java+POM 跨浏览器测试之------读取配置文件

    我们知道,web 测试的时候是需要切换不同的浏览器以查看每个功能在不同浏览器上的运行情况,使得开发的程序更具有健壮性.本文先总结一下如何通过读取配置文件来切换浏览器. 具体步骤如下: 一.编写配置文件 ...