请解释该Makefile文件每一行的含义,并论述输入make命令以及make clean命令后的执行结果:

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了请解释该Makefile文件每一行的含义,并论述输入make命令以及make clean命令后的执行结果:相关的知识,希望对你有一定的参考价值。

一个文件夹中包括ctrl_main.c,tcp_server.c,tcp_server.h,udp_server.c,udp_server.h,translate.c,translate.h和Makefile,主函数main在ctrl_main.c中。请解释该Makefile文件每一行的含义,并论述输入make命令以及make clean命令后的执行结果:
MAIN =ctrl_main
OBJS= ctrl_main.o tcp_server.o udp_server.o translate.o
CC= gcc
CFLAGS= -Wall -O2
LIBSLINK= -lpthread
DEBUG_FLAG= -g
.SUFFIXES=.o .c
$(MAIN):$OBJS
$CC-o $@ $(CFLAGS) $DEBUG_FLAG $OBJS $(LIBSLINK)
.o: .c
$(CC) $(CFLAGS) -c $<
clean:
/bin/rm -f ctrl_main *.o

参考技术A MAIN =cidp_main//变量定义, 最后的可执行文件
OBJS = cidp_main.ounion.o atm.o card.o//变量定义, 所有目标文件
CC = gcc//变量定义, 所用的编译器
CFLAGS =-Wall -O2//变量定义, 编译器参数, 打开所以警告和进行2级优化
LIBSLINK =-lpthread//变量定义, 编译器链接库参数
DEBUG_FLAG =-g//变量定义, 编译器调试信息参数
$(MAIN):$OBJS//目标和依赖,编译可执行程序的规则
$CC -o $@ $(CFLAGS) $DEBUG_FLAG $OBJS $(LIBSLINK) //编译可执行程序的命令, $@为目标项
cidp_main.o: cidp_main.c//目标和依赖,编译目标文件的规则
$(CC) $(CFLAGS) -c $<//编译ctrl_main.o的命令, $<为依赖列表首项
tcp_server.o:tcp_server.c tcp_server.h//目标和依赖,编译目标文件的规则
$(CC) $(CFLAGS) -c $<//编译tcp_server.o的命令, $<为依赖列表首项
udp_server.o: udp_server.c udp_server.h//目标和依赖,编译目标文件的规则则
$(CC) $(CFLAGS) -c $<//编译udp_server.o的命令, $<为依赖列表首项
translate.o: translate.c translate.h//目标和依赖,编译目标文件的规则
$(CC) $(CFLAGS) -c $<//编译translate.o的命令, $<为依赖列表首项
clean://clean目标,清除编译结果命令make clean
/bin/rm -f ctrl_main *.o//make clean具体要执行的命令, 删除ctrl_main和所以目标文件

1. make命令执行后产生所有目标文件,并最后产生可执行文件ctrl_main
2. make clean命令执行后, 删除ctrl_main和所有目标文件
参考技术B 做friendarm项目的时候,发现一个文件夹里有两个makefile文件,一个makefile1和makefile,make先执行哪个? 参考技术C 看不到makefile的内容。

锁文件解释,每一行到底是啥意思?纱线锁

【中文标题】锁文件解释,每一行到底是啥意思?纱线锁【英文标题】:Lockfile explanation, what exactly every line mean? yarn.lock锁文件解释,每一行到底是什么意思?纱线锁 【发布时间】:2020-01-27 03:45:01 【问题描述】:

我想知道每一行到底是什么意思? 由于我的项目中的依赖关系,我在使用包时遇到了一些问题。

首先将 nuxt 从 1x 更新到 2x 后,所有测试都开始失败。 经过数小时的网络挖掘后,我注意到我有 2 个版本的

chokidar dependencies

它有不同的手表包版本,所以我锁定了一个包

resolutions 在我的包文件中。

是手表包^2.0.0-beta.7 所有测试都开始工作了!

但不幸的是,开发者模式停止支持热重载... 并开始崩溃。

所以我尝试将 chokidar 锁定到版本 "^3.0.2",现在一切都很好!

但我开始想知道这个文件中的一切是如何工作的 因为在锁定 chokidar 之后,所有问题都消失了!

那条线到底是什么意思?使用哪种chokidar?两个都?第一的?第二? 甚至在这里

有些依赖。的依赖,有 7 个版本!

【问题讨论】:

【参考方案1】:

据我了解(如果我错了,请纠正我),第一行列出了所有依赖项,所以你有例如7 个依赖于某个 chalk 版本的软件包。 第二行列出了 Yarn 选择的要安装的版本,它满足上述条件。示例:Chokidar 的版本为 3.1.1,因为标准规定一个包需要它大于 2.0.2,而一个包需要它大于 3.0.2。由于 3.1.1 满足两者,因此使用它。如果条件之一是“恰好 3.0.2”,则行将被拆分,并且两个版本都将包含在锁定文件中。

第三行是包的 URL,带有一个哈希。 第四个也是一个哈希,用于在运行yarn install时验证下载包时。

如果 Yarn 找不到满足所有依赖项的版本,它会将条目分成组,并获取一个版本来匹配每个组的条件。

至于你的第二个问题:它只使用一个版本的 Chokidar:3.1.1

一般解释见https://yarnpkg.com/lang/en/docs/yarn-lock/

【讨论】:

以上是关于请解释该Makefile文件每一行的含义,并论述输入make命令以及make clean命令后的执行结果:的主要内容,如果未能解决你的问题,请参考以下文章

请解释下面delphi代码每句的含义

c# StreamWriter 应用中,我想每一行中写入两个不同性质的数据,该怎么写呢

Makefile 解释。理解别人的 Makefile

Python如何读取csv文件某一列的每一行数据,并判断该数值是不是满足条件?

有人可以解释所有代码的含义吗?蟒蛇[关闭]

regular expression (Linux)中 * 的含义, 请举例