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中,^ ...
随机推荐
- MathType插入带序号公式的两种方法
方法一: 由于我之前使用表格15% 70% 15%来布局的,所以最开始相的就是如何录入公示后插入公式序号,如下图所示 先设置序号格式 录好公式后点“Insert Number”就好了,这样的话需要紧挨 ...
- PHP文件包含漏洞总结
0x00 前言 PHP文件包含漏洞的产生原因是在通过PHP的函数引入文件时,由于传入的文件名没有经过合理的校验,从而操作了预想之外的文件,就可能导致意外的文件泄露甚至恶意的代码注入. 最常见的就属于本 ...
- 【译】你对position的了解有多少?
此文根据Steven Bradley的<How Well Do You Understand CSS Positioning?>所译,整个译文带有我自己的理解与思想,如果译得不好或不对之处 ...
- Android百度地图(二)结合方向传感器我们自己定位哪里走
Android百度地图(二)结合方向传感器我们自己定位哪里走 本文代码在http://blog.csdn.net/xyzz609/article/details/51943556的基础上进一步改动.有 ...
- 基于Spark机器学习和实时流计算的智能推荐系统
概要: 随着电子商务的高速发展和普及应用,个性化推荐的推荐系统已成为一个重要研究领域. 个性化推荐算法是推荐系统中最核心的技术,在很大程度上决定了电子商务推荐系统性能的优劣,决定着是否能够推荐用户真正 ...
- Mac上安装使用Nginx
1.brew search nginx 2.brew install nginx 启动nginx ,sudo nginx ;访问localhost:8080 发现已出现nginx的欢迎页面了. 备注: ...
- [Angular] Angular Attribute Decorator - When to use it?
When we pass value to a component, normally we use @Input. <my-comp [courses]="(courses$ | a ...
- 【IE兼容性】background:transparent IE中Bug,不能选中input输入框,出现这个问题主要是IE8
先解释下,background:transparent,默认在IE上会被解析成 background: none transparent scroll repeat 0% 0% transparent ...
- bootstrap popover 如何在hover状态移动到弹出上不消失
bootstrap中的popover其实就是对tooltip做了一定升级,拥有了标题和内容 概要 使用的时候依赖第三方插件 依赖tooltip插件 必须初始化 title 和 content 可以在p ...
- pip安装mysql报错 ld: library not found for -lssl
ld: library not found for -lssl clang: error: linker command failed with exit code (use -v to see in ...