Makefile 开发环境全能管家
变量的应用:
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 开发环境全能管家的更多相关文章
- 沁恒CH32V003(二): Ubuntu20.04 MRS和Makefile开发环境配置
目录 沁恒CH32V003(一): CH32V003F4P6开发板上手报告和Win10环境配置 沁恒CH32V003(二): Ubuntu20.04 MRS和Makefile开发环境配置 硬件准备 沁 ...
- 翻译:打造基于Sublime Text 3的全能python开发环境
原文地址:https://realpython.com/blog/python/setting-up-sublime-text-3-for-full-stack-python-development/ ...
- linux下使用vscode和makefile搭建C++开发环境
最近在linux上跑一些开源库做学习用, 顺手就搭了一下vscode的c++开发环境, 这里分享一下vscode进行C++开发的基本环境结构. 1. 首先是编辑器, vscode直接官网下载的, 后期 ...
- Qt for Android开发环境搭建及测试过程记录
最近学习了Qt的QML编程技术,感觉相较于以前的QtGUI来说更方便一些,使用QML可以将界面与业务逻辑解耦,便于开发. QML支持跨平台,包括支持Android平台,因此可以使用Qt的QML进行An ...
- Windows+Linux----打造和谐的开发环境
其实Windows和Linux并非水火不容,相反,我觉得,如果将二者结合起来,取长补短,便可打造一个华丽.实用的开发环境. 吾以为,不会用linux的人,不能称为一个程序猿,但是一味觉得Linux很吊 ...
- Linux编译源码的方式安装Qt4开发环境(基于Ubuntu系统)
1.到官网http://qt-project.org/downloads或者ftp://ftp.qt-project.org/上下载Qt的源码包,要安装当然要先有源码咯,我下载的是qt-everywh ...
- 20145229&20145316《信息安全系统设计基础》实验一 开发环境的熟悉
实验封面 实验内容 本次实验使用 Redhat Linux 9.0 操作系统环境,安装 ARM-Linux 的开发库及编译器.创建一个新目录,并在其中编写 hello.c 和 Makefile 文件. ...
- kali linux Python开发环境初始化
kali linux Python 黑客编程1 开发环境初始化 为什么要选择Python? Python作为目前Linux系统下最流行的编程语言之一,对于安全工作者的作用可以和C++相提并论.Pyth ...
- zju(1)嵌入式开发环境构建
1. 实验目的 搭建嵌入式开发环境,安装ubntu,编译交叉工具链,安装配置tftp,nfs.用makefile 编译几个文件,在实验台上运行. 2. 实验内容 1) 安装ubuntu12.04 2) ...
随机推荐
- 用unity3d+cardboard开发一个全景图片查看器
一.建立全景播放场景: 建立一个unity项目,并建立videoplay场景,在场景中拖入一个球体,将全景照片拉到球体上,自动形成material和texture. 二.创建一个新的表面着色器,并修改 ...
- Oracle的select使用
1.select : 语法: select [distinct] {*,column [alias],...} from table 注:[]括起来的内容代表可有可无 * 代表所有列 distinct ...
- git 临时记录
http://blog.csdn.net/wangbole/article/details/8552808 http://blog.csdn.net/gq414047080/article/detai ...
- 《BI那点儿事》ETL中的关键技术
ETL(Extract/Transformation/Load)是BI/DW的核心和灵魂,按照统一的规则集成并提高数据的价值,是负责完成数据从数据源向目标数据仓库转化的过程,是实施数据仓库的重要步骤. ...
- mac 安装tomcat
一.下载 首先在tomcat官网下载完整版的 tomcat.tar.gz包,Core下 注: zip用于windows操作系统,tar.gz用于unix和linux操作系统. Binary Distr ...
- Spring+Mybatis 手动控制事务
public boolean testDelete(String jobCode) throws Exception { boolean flag = false; //1.获取事务控制管理器 Dat ...
- Using Spring Boot without the parent POM
Using Spring Boot without the parent POM: 问题 spring boot项目一般情况下的parent如下: <parent> <groupId ...
- JQuery操作HTML文档
一.JQuery选择元素 1.$("p").click(function(){$(this).hide();} 点击HTML页面的任何p元素都会隐藏该p元素 2.$("# ...
- git: No refs in common and none specified; doing no
用gitolite新建项目,clone后首次push,可能会出现: $ git push No refs in common and none specified; doing nothing ...
- 计算机网络http,https,tcp,udp,get,post
一.HTTP 超文本传输协议HTTP协议被用于在Web浏览器和网站服务器之间传递信息,HTTP协议以明文方式发送内容,不提供任何方式的数据加密,如果攻击者截取了Web浏览器和网站服务器之间的传输报文, ...