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语法的更多相关文章

  1. 04 Linux 指令语法结构与帮助命令

    一.Linux指令语法结构 [tyang3@localhost Desktop]$ command [-options] [arguments] 指令           选项           参 ...

  2. Linux man语法结构说明

    一.man手册的内容结构(说明书页的格式): 标题含义: Name命令的名称和用途(摘要) Synopsis命令语法(摘要) Description完整描述 Environment命令使用的环境变量 ...

  3. linux基本语法和常用运维命令

    linux上的操作一般是命令行操作,看起来很高大上,让人畏而远之. Help!Help! 忽然间闯入的linux黑黑的世界,怎么办,不要慌.赶紧敲出一个help命令,然后回车,黑色的窗口就会展示一些常 ...

  4. Linux Crontab语法

    Crontab语法 Lists 链表值 : 逗号,表示并列,要依次序;Examples:"1,2,5,9", "0-4,8-12". Ranges of num ...

  5. linux命令语法格式

    一.命令的一般格式 command [option]... [argument]... command [options] [arguments] 具体说明: 1.command: 表示命令的名称,如 ...

  6. Linux read语法及浅析

    read命令 -n(不换行) -p(提示语句) -n(字符个数) -t(等待时间) -s(不回显) 1.基本读取read命令接收标准输入(键盘)的输入,或其他文件描述符的输入(后面在说).得到输入后, ...

  7. Linux基本语法

    Shell编程 摘要: Shell历史 Shell的作用是解释用户的命令,用户输入一条命令,Shell就解释执行一条,这条方式称为交互式(interactive),Shell还有一种执行命令的方式称为 ...

  8. linux 基础语法

    1.linux常用命令 1.1 系统命令 runlevel                     # 查看当前的运行级别systemctl status sshd        # 开启网络服务功能 ...

  9. Linux正则表达式语法

    基本组成部分: 正则表达式的基本组成部分. 正则表达式 描述 示例 \ 转义符,将特殊字符进行转义,忽略其特殊意义 a\.b匹配a.b,但不能匹配ajb,.被转义为特殊意义 ^ 匹配行首,awk中,^ ...

随机推荐

  1. MathType如何插入竖直线

    不用键盘上的竖线,用左竖直线和右竖直线.

  2. 微信开发之消息接收与回复--weixin-java-tools

    一.前言 在上一篇文章<微信开发之如何使用开发工具--weixin-java-tools>中我给各位介绍了weixin-java-tools,并且介绍了如何使用weixin-java-to ...

  3. solr6.6 导入 pdf/doc/txt/json/csv/xml文件

    文本主要介绍通过solr界面dataimport工具导入文件,包括pdf.doc.txt .json.csv.xml等文件,看索引结果有什么不同.其实关键是managed-schema.solrcon ...

  4. shareToQQ,qq 4.1.1 for android,闪退

    用shareToQQ函数分享图文消息,在qq 4.1.1 for android版本下打开联系人列表数秒后会闪退!在更高版本的V4.5.2.1,V4.2.1下则没有这个问题(证明各种设置没问题),各位 ...

  5. HDFS 中向 DataNode 写入数据失败了怎么办

    https://blog.csdn.net/HeatDeath/article/details/79012258 http://wenda.chinahadoop.cn/question/3323 h ...

  6. What is Continuous Integration?

    什么叫持续集成? 原文: https://docs.microsoft.com/en-us/azure/devops/what-is-continuous-integration ---------- ...

  7. vue2 router-link to

    <template> <div> <nv-header></nv-header> <div class="artlist"&g ...

  8. HDU 5360 Hiking(优先队列)2015 Multi-University Training Contest 6

    Hiking Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) Total S ...

  9. 微信小程序 - 更改button状态

    wxml <button class='yes-orders' style='{{status_css}}' bindtap='clickExpress'> {{statusOrders} ...

  10. antd-design LocaleProvider国际化

    1.LocaleProvider 使用 React 的 context 特性,只需在应用外围包裹一次即可全局生效. import { LocaleProvider } from 'antd'; imp ...