博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Linux make语法
阅读量:5052 次
发布时间:2019-06-12

本文共 1653 字,大约阅读时间需要 5 分钟。

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"标签,执行该标签下的命令--$@表示生成的目标文件--$

 

 

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

 

make编译多文件时,会以.c文件的时间和.o文件的时间做对比,只编译修改过的.c文件,提高编译效率。

 

.PHONY:cleanWORKDIR=.VPATH = ./srcLIBOBJS=  socketclient.o itcastlog.oOBJS= demo01_testplatform.oLIB1 = libmysocket.soEXE1 = mysocketexeCC = gccCFLGS= -Wall -g -I$(WORKDIR)/inc/LIBFLAG = -L$(HOME)/liball: $(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 -fPICclean:    rm -rf $(BIN) *.o $(HOME)/lib/$(LIB1) ./$(LIB1)

 

转载于:https://www.cnblogs.com/zhanggaofeng/p/5770869.html

你可能感兴趣的文章
Docker常用命令
查看>>
windows7+docker添加php扩展
查看>>
[UE4]多播代理实例
查看>>
开奖计算---五星直选复式
查看>>
正则表达式
查看>>
HTML5 地理位置的获取 (精确)
查看>>
MongoDB - Cursors
查看>>
Servlet中Web.xml的配置详解
查看>>
PHP QR CODE 类库生成二维码
查看>>
SpringMVC(二七) 自定义视图
查看>>
git 版本控制
查看>>
浅谈叶小钗面试的几个问题
查看>>
进程间通信方式总结
查看>>
FCC 中级算法题 Finders Keepers
查看>>
Python之环境搭建与pycharm的配置django安装及MySQL数据库配置
查看>>
处理选中图片
查看>>
SpringBoot入门教程(十九)@ControllerAdvice+@ExceptionHandler全局捕获Controller异常
查看>>
iOS - 登陆、注销、修改密码
查看>>
给View添加阴影 和边框
查看>>
触发器创建及Navicat中使用
查看>>