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中,^ ...
随机推荐
- 如何使用 vimdiff 来 git diff
git config --global diff.tool vimdiffgit config --global difftool.prompt falsegit config --global al ...
- nativeexcel数据集导出excel
nativeexcel数据集导出excel uses Dataset2Excel; procedure Tfdm.exportXLS(dataset: TDataSet);var xls: TData ...
- 【POI】修改已存在的xls,新添一列后,再保存本文件+获取最大有效行号+获取单元格内容
使用POI版本: ① ② ③ ④ package com.poi.dealXlsx; import java.io.File; import java.io.FileInputStream; impo ...
- win10 关键错误开始菜单和cortana无法工作 的问题
win10点击 '此电脑' 反键选择 管理 -服务和应用程序-服务 找到 User Manager 双击点击启动就行了 把 UserManager服务设为自动启动解决了
- macOS中Vim基本配置,颜色主题/语法/indent设置
macOS中Vim基本配置 Vim的初始化配置 .vimrc 存放位置 macOS 环境下 vim 的初始化配置文件为 .vimrc , 通常有两个(系统版本和用户版本),一个位于 /usr/shar ...
- iOS:MBProgressHUD的基本使用
下载地址:https://github.com/jdg/MBProgressHUD/ //方式1.直接在View上show HUD = [[MBProgressHUD showHUDAddedTo:s ...
- Django入门与实践
安装: 1.https://www.djangoproject.com/查找最新版本 2.pip install Django==1.10.6安装Django 创建项目: 1.打开命令行,进入想要 ...
- Vue组件进阶知识总结
上一篇我们重点介绍了组件的创建.注册和使用,熟练这几个步骤将有助于深入组件的开发.另外,在子组件中定义props,可以让父组件的数据传递下来,这就好比子组件告诉父组件:“嘿,老哥,我开通了一个驿站,你 ...
- http://www.oschina.net/code/snippet_12_13918
http://www.oschina.net/code/snippet_12_13918
- 安装Scala 找不到或无法加载主类 scala.tools.nsc.MainGenericRunner 错误
对于安装Scala时 找不到或无法加载主类 scala.tools.nsc.MainGenericRunner 错误,不管是linux还是window系统,原因很大可能是scala的安装路径中出现空格 ...