变量的应用:

CC=gcc

RM=rm

EXE=main.exe

OBJS=目标

伪目标的应用:

.PHONY:clean

自动变量的应用:

$@:表示一个规则的目标

$^:表示的是规则中的所有的先决条件

$<:表示的是规则中的第一个先决条件;

变量的类别:递归扩展变量和简单扩展变量。

变量的条件赋值 :?=表示条件是否已经赋值了,如果没有则赋值;

高级变量的引用功能:在赋值的同时完成文件名后缀的替换工作;

避免变量被覆盖的方法:在变量前加override;

借助模式精简规则:% 表示通陪符

通过函数增强功能:

wildcard:当前目录下满足模式下的所有文件或者目录名列表;

例如l: $(wildcard *.c)

patsubst:,模式替换;

例如:$(patsubst %.c %.o $(RSCS))

让编译环境更加有序:

1,目标文件与最终生成的可执行文件不在同一目录中;

目录的自动创建与删除:

以后有不懂的地方可以查看这个源程序

.PHONY: all clean

MKDIR = mkdir

RM = rm

RMFLAGS = -rf

CC = gcc

DIR_OBJS = objs

DIR_EXES = exes

DIR_DEPS = deps

DIRS = $(DIR_OBJS) $(DIR_EXES) $(DIR_DEPS)

EXE = main.exe

EXE := $(addprefix $(DIR_EXES)/,$(EXE))

SRCS = $(wildcard *.c)

OBJS = $(SRCS:.c=.o)

OBJS :=$(addprefix $(DIR_OBJS)/,$(OBJS))

DEPS = $(SRCS:.c=.dep)

DEPS := $(addprefix $(DIR_DEPS)/,$(DEPS))

all: $(DIRS) $(EXE)

$(DIRS):

$(MKDIR) $@

$(EXE): $(OBJS)

$(CC) $^ -o $@

$(DIR_OBJS)/%.o: %.c

$(CC) -c $^ -o $@

$(DIR_DEPS)/%.dep: %.c

@echo "creating $@ ...."

@set -e; \

$(RM) $(RMFLAGS) $@.tmp; \

$(CC) -E -MM $^ > $@.tmp ;\

sed 's,\(.*\)\.o[ :]*,objs/\1.o: ,g' < $@.tmp > $@ ;\

$(RM) $(RMFLAGS) $@.tmp

clean:

$(RM) $(RMFLAGS) $(DIRS)

Makefile 开发环境全能管家的更多相关文章

  1. 沁恒CH32V003(二): Ubuntu20.04 MRS和Makefile开发环境配置

    目录 沁恒CH32V003(一): CH32V003F4P6开发板上手报告和Win10环境配置 沁恒CH32V003(二): Ubuntu20.04 MRS和Makefile开发环境配置 硬件准备 沁 ...

  2. 翻译:打造基于Sublime Text 3的全能python开发环境

    原文地址:https://realpython.com/blog/python/setting-up-sublime-text-3-for-full-stack-python-development/ ...

  3. linux下使用vscode和makefile搭建C++开发环境

    最近在linux上跑一些开源库做学习用, 顺手就搭了一下vscode的c++开发环境, 这里分享一下vscode进行C++开发的基本环境结构. 1. 首先是编辑器, vscode直接官网下载的, 后期 ...

  4. Qt for Android开发环境搭建及测试过程记录

    最近学习了Qt的QML编程技术,感觉相较于以前的QtGUI来说更方便一些,使用QML可以将界面与业务逻辑解耦,便于开发. QML支持跨平台,包括支持Android平台,因此可以使用Qt的QML进行An ...

  5. Windows+Linux----打造和谐的开发环境

    其实Windows和Linux并非水火不容,相反,我觉得,如果将二者结合起来,取长补短,便可打造一个华丽.实用的开发环境. 吾以为,不会用linux的人,不能称为一个程序猿,但是一味觉得Linux很吊 ...

  6. Linux编译源码的方式安装Qt4开发环境(基于Ubuntu系统)

    1.到官网http://qt-project.org/downloads或者ftp://ftp.qt-project.org/上下载Qt的源码包,要安装当然要先有源码咯,我下载的是qt-everywh ...

  7. 20145229&20145316《信息安全系统设计基础》实验一 开发环境的熟悉

    实验封面 实验内容 本次实验使用 Redhat Linux 9.0 操作系统环境,安装 ARM-Linux 的开发库及编译器.创建一个新目录,并在其中编写 hello.c 和 Makefile 文件. ...

  8. kali linux Python开发环境初始化

    kali linux Python 黑客编程1 开发环境初始化 为什么要选择Python? Python作为目前Linux系统下最流行的编程语言之一,对于安全工作者的作用可以和C++相提并论.Pyth ...

  9. zju(1)嵌入式开发环境构建

    1. 实验目的 搭建嵌入式开发环境,安装ubntu,编译交叉工具链,安装配置tftp,nfs.用makefile 编译几个文件,在实验台上运行. 2. 实验内容 1) 安装ubuntu12.04 2) ...

随机推荐

  1. 。【自学总结 1】------3ds Max 界面

    3ds Max 界面包含4部分(7区域) 4部分:菜单.控制工具.命令面板.窗口区 7区域: 1.标题栏:主要用于显示当前工作文件的名称,可以看到文件存储路径. 2.菜单栏:菜单中的命令如果带有省略号 ...

  2. 使用Rsync进行文件的同步与备份

    Rsync是Linux下非常不错的文件同步备份工具,安全性高.备份迅速.支持增量备,功能强大且高效. 服务端配置 Rsync服务的配置文件/etc/rsyncd.conf,示例配置(带用户名密码配置) ...

  3. [HIHO1052]基因工程(找规律)

    题目链接:http://hihocoder.com/problemset/problem/1052 题意:中文题面,就是修改其中几个字符,使得[0,k-1]和[n-k,n-1]的字符相同. 会发现一个 ...

  4. Beaglebone Black–I2C 接 BMP280 获取当前温度

    我有两个含温度传感的模块,一个是AOSONG 奥松电子的 AM2320 温度湿度,另一个是九轴里面的 Bosch BMP280.由于 AM2320 用 I2C MODBUS,直接用 I2C Tools ...

  5. ConsensusClusterPlus根据基因表达量对样品进行分类

    #http://www.ncbi.nlm.nih.gov/pmc/articles/PMC2881355/ 一致聚类方法,采用重抽样方法来验证聚类合理性. library(ALL)data(ALL)d ...

  6. html5 drag and drop

    注:链接.图片默认是draggable的. mousemove在整个拖放的过程中不会被触发. dragStart设置: e.dataTransfer.effectAllowed = "mov ...

  7. 使用自己的CSS框架(转)

    [经典推介]CSS框架选择向导 不少CSS框架已经存在了一段时间,但大多数Web开发人员避免使用它们. 相反最有经验的开发者希望创建自己的CSS框架,提供个性化解决方案的优势,并减少对第三方的解决方案 ...

  8. js给文本框赋值 value与innerHTML

    <input type="test" name="testName" id="testId"> 赋值操作: <script ...

  9. <a>每次点击都会让浏览器重新打开一个窗口问题

    <a> 标签的 target 属性规定在何处打开链接文档.如果在一个 <a> 标签内包含一个 target 属性,浏览器将会载入和显示用这个标签的 href 属性命名的.名称与 ...

  10. python打怪之路【第一篇】:99乘法表

    需求:实现99乘法表 代码: #!/usr/bin/env python # -*- coding:utf-8 -*- #author chenjing for i in range(10): for ...