变量的应用:

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. 批量运行R包

    #批量运行包:all.pcg <- c("data.table","ggplot2","rmarkdown","tidyr& ...

  2. [问题2014A13] 复旦高等代数 I(14级)每周一题(第十五教学周)

    [问题2014A13]  设 \(V\) 是数域 \(K\) 上的 \(n\) 维线性空间, \(\varphi\) 是 \(V\) 上的幂零线性变换且满足 \(\mathrm{r}(\varphi) ...

  3. 关于sifari兼容性的一个问题

    输入框 一个很基础的控件 结果出现了兼容性问题 在chrome ie android上页面正常 结果在Safari和IOS系统里面输入框无法输入, 点击后边框有高亮效果但是无法输入文本,问题代码如下: ...

  4. CSS3的chapter2

    CSS的选择符有很多,大致分为八种: 通配选择符 元素选择符 群组选择符 关系选择符 id及class类选择符 伪类选择符 属性选择符 伪对象选择符 1.通配选择符: 可以使用模糊指定的方式来对对象进 ...

  5. IE/Firefox/Chrome等浏览器保存Cookie的位置

    IE/Firefox/Chrome等浏览器保存Cookie的位置 原文  http://smilejay.com/2013/04/browser-cookie-location/   前面写了篇长文( ...

  6. 第一课 python的几种环境配置

    第一种,pythom+eclipse+pydev 这种安装方式比较简单,网上教程比较多,需要注意的是安装eclipse前需要安装jdk.具体过程不再啰嗦了.下面主要讲讲在64位系统下安装numpy,s ...

  7. 发布网站详细步骤(.Net)

    (i)打开需要发布的网站 右键需要发布的项目 点击下拉框新建配置文件,输入配置文件名称,点击确定,下一步 发布方法选文件系统,目标位置:项目的根目录 配置选Release 点击发布 (ii) 打开ii ...

  8. shockt通信

    目前为止,我们使用的最多网络协议还是tcp/ip网络.通常来说,我们习惯上称为tcp/ip协议栈.至于协议栈分成几层,有两种说法.一种是五层,一种是七层. 5.应用层    4.传输层    3.网络 ...

  9. CSRF攻击原理以及防御

    一.CSRF是什么? CSRF(Cross-site request forgery),中文名称:跨站请求伪造,也被称为:one click attack/session riding,缩写为:CSR ...

  10. Android 实现闪屏页和右上角的倒计时跳转

    效果图: 闪屏页用到了handler和CountDownTimer类,还需配置一下Activity的主题,这里是:android:theme="@android:style/Theme.No ...