Linux make语法
make是一种控制编译或者重复编译软件的工具。
make可以自动关键软件的编译内容、方式和时机,从而使程序员把更多的精力集中在编写代码上。
make主要的机制是在命令行键入make命令,make会自动执行当前目录下的makefile文件
makefile规则
标号:依赖项
(tab键)命令代码
(tab键)命令代码
--每个命令代码的第一个字符必须是tab键,而不是空格键,不然make会报错。
命令行直接键入make,make默认只会执行第一个标号的命令代码

上图命令行详解
start:hello.o--表示执行start标号下的命令行需要hello.o文件,
如果当前目录下有hello.o文件,那么会直接执行start标号下的命令行;
如果当前目录下没有hello.o文件,那么make会自动寻找生成hello.o文件的标号,找到hello.o标号,
执行hello.o标号下的命令行,然后执行start标号下的命令行。
如果需要执行指定标号的命令行,必须使用make参数
--make 需要执行的标号
--例如:make clean

在make语法中"@"表示不打印该命令语句,只打印命令执行结果
--例如@echo "-OK--" 只会打印-OK---

为了简化编辑和维护makefile,可以在makefile中使用变量。
--varname=some_text
把变量用括号扩起来,前面加上$符号就可以引用该变量的值
--$(varname)
按照惯例makefile的变量都是大写


$(SRCS:.c=.o)意思是将SRCS变量中的.c替换成.o

在makefile中用"#"来添加注释
make中的依赖声明
.SUFFIXES:.c (一个空格) .o
--这表明.o文件依赖于.c文件,.c和.o文件之间存在着依赖关系
--强调:使用.SUFFIXES来表示两个文件的依赖关系,必须两个文件的文件名一致,只是文件类型不同才可以适应.SUFFIXES 在make语句start:$(OBJS)中,表明依赖项是.o文件,根据.SUFFIXES声明,.o文件依赖于.c文件,找到".c.o"标签,执行该标签下的命令
--$@表示生成的目标文件
--$<表示生成目标的源文件
--$^表示依赖项
--$@、$<都是针对于.SUFFIXES声明而言的,在.SUFFIXES声明定义的目标文件才用$@表示,源文件才用$<表示。

make中多个.c文件联合编译
--SRCS=hello.c\
(tab键)add.c
--这表示有两个源文件,
--OBJS=$(SRCS:.c=.o) 此时也会对应的生成两个.o文件
--start:$(OBJS)这时候会发现两个依赖项,所以会执行".c.o"标签两次,从而生成两个.o文件。

make编译多文件时,会以.c文件的时间和.o文件的时间做对比,只编译修改过的.c文件,提高编译效率。
.PHONY:clean WORKDIR=. VPATH = ./src LIBOBJS= socketclient.o itcastlog.o
OBJS= demo01_testplatform.o LIB1 = libmysocket.so
EXE1 = mysocketexe
CC = gcc
CFLGS= -Wall -g -I$(WORKDIR)/inc/
LIBFLAG = -L$(HOME)/lib all: $(LIB1) $(EXE1) $(LIB1):$(LIBOBJS)
$(CC) -shared -fPIC $^ -o $@
cp $(LIB1) $(HOME)/lib
mv $(LIB1) ./lib $(EXE1):$(OBJS)
$(CC) $^ $(LIBFLAG) -lmysocket -o $@ .c.o:
$(CC) $(CFLGS) -c $< -o $@ -shared -fPIC
clean:
rm -rf $(BIN) *.o $(HOME)/lib/$(LIB1) ./$(LIB1)
Linux make语法的更多相关文章
- 04 Linux 指令语法结构与帮助命令
一.Linux指令语法结构 [tyang3@localhost Desktop]$ command [-options] [arguments] 指令 选项 参 ...
- Linux man语法结构说明
一.man手册的内容结构(说明书页的格式): 标题含义: Name命令的名称和用途(摘要) Synopsis命令语法(摘要) Description完整描述 Environment命令使用的环境变量 ...
- linux基本语法和常用运维命令
linux上的操作一般是命令行操作,看起来很高大上,让人畏而远之. Help!Help! 忽然间闯入的linux黑黑的世界,怎么办,不要慌.赶紧敲出一个help命令,然后回车,黑色的窗口就会展示一些常 ...
- Linux Crontab语法
Crontab语法 Lists 链表值 : 逗号,表示并列,要依次序;Examples:"1,2,5,9", "0-4,8-12". Ranges of num ...
- linux命令语法格式
一.命令的一般格式 command [option]... [argument]... command [options] [arguments] 具体说明: 1.command: 表示命令的名称,如 ...
- Linux read语法及浅析
read命令 -n(不换行) -p(提示语句) -n(字符个数) -t(等待时间) -s(不回显) 1.基本读取read命令接收标准输入(键盘)的输入,或其他文件描述符的输入(后面在说).得到输入后, ...
- Linux基本语法
Shell编程 摘要: Shell历史 Shell的作用是解释用户的命令,用户输入一条命令,Shell就解释执行一条,这条方式称为交互式(interactive),Shell还有一种执行命令的方式称为 ...
- linux 基础语法
1.linux常用命令 1.1 系统命令 runlevel # 查看当前的运行级别systemctl status sshd # 开启网络服务功能 ...
- Linux正则表达式语法
基本组成部分: 正则表达式的基本组成部分. 正则表达式 描述 示例 \ 转义符,将特殊字符进行转义,忽略其特殊意义 a\.b匹配a.b,但不能匹配ajb,.被转义为特殊意义 ^ 匹配行首,awk中,^ ...
随机推荐
- 【json】前台ajax序列化的多个属性拼接在一起的字符串,转化为JSONObject对象
1.首先看一下前台序列化了哪些东西: 部分js代码 //查询按钮 $(".questButton").click(function(){ $.ajax({url:"/qu ...
- 几种常用的json序列化和反序列化工具介绍
一.前言 Json序列化和反序列化工作中会时常用到,也是目前数据交互的常用格式,Rest风格的接口加上json格式的数据交互,真的是天作之合. 目前Json字符与Json对象的相互转换方式有很多,接下 ...
- 搭建redis集群环境
Redis的集群机制 ============================= 转自http://lib.csdn.net/article/redis/39999 别人写的,写得不错,转了. Red ...
- Echart学习
制表,展示好帮手,自己看官方文档吧,有示例和入门指导 参考:1.http://echarts.baidu.com/tutorial.html#5%20%E5%88%86%E9%92%9F%E4%B8% ...
- Python图像处理(16):图像金字塔
快乐虾 http://blog.csdn.net/lights_joy/ 欢迎转载,但请保留作者信息 图像金字塔是图像中多尺度表达的一种,最初用于机器视觉和图像压缩.一幅图像的金字塔是一系列以金字塔形 ...
- 怎样用bat批量重命名文件夹和文件
很早以前本人写过重命名文件夹的文章,发现其中稍有不完善的地方,其主要功能在文件夹名前统一加上字符,或者在文件夹名后统一加上字符,有网友反应功能太单一.今天我又仔细研究了一下bat批处理代码,分别能完全 ...
- php之防注入程序绕过浅谈
<?php/*判断传递的变量是否含有非法字符如:$_POST/$_GET功能:SQL防注入系统*/ //屏蔽错误提示error_reporting(7); //需要过滤的字符 $ArrFiltr ...
- Android实战简易教程-第十枪(画廊组件Gallery有用研究)
Gallery组件用于拖拽浏览图片,以下我们就来看一下怎样实现. 一.实现Gallery 1.布局文件非常easy: <?xml version="1.0" encoding ...
- 取给定正整数的指定bit位開始的指定长度的数据
接口说明 原型: unsigned int GetBitsValue(unsigned int input, unsigned int startbit, unsigned int bitlen) 输 ...
- centos7 安装及破解 jira 7.3.3
JIRA是Atlassian公司出品的项目与事务跟踪工具,被广泛应用于缺陷跟踪.客户服务.需求收集.流程审批.任务跟踪.项目跟踪和敏捷管理等工作领域. 同样jira 的运行依赖java环境,上一节已经 ...