Linux环境下make执行Makefile报No such file or directory错误
报错根本原因
这类报错和你编写的作业业务代码没有任何关联,纯粹是Makefile的规则格式违反了make的解析要求,具体有两个核心问题:
- 命令块没有按换行分隔独立命令:你本来要先后执行「编译生成sync可执行文件」、「创建指向sync的assn4软链接」两个shell命令,但把两条命令的内容全部写在了同一行。make会把整行内容原样作为编译命令的参数传给gcc,导致编译器把
ln、-sf、assn4这些软链接命令的内容,全部当成自己的输入文件、参数来解析,才会抛出一系列找不到文件、不识别参数的报错。 - 存在潜在拼写笔误:你提供的Makefile文本里,编译参数写的是
ssync.c,和实际执行输出里的sync.c不一致,需要核对本地实际的源文件名称,避免复制过程中的多打、漏打字符导致找不到文件的错误。
教授端可以正常运行,大概率是你复制Makefile内容到本地的时候,不小心把原本换行分隔的两条命令挤到了同一行,同时引入了拼写笔误。
修正后的可正常运行的Makefile
sync: sync.c prodcons.c prodcons.h producer.c producer.h consumer.c consumer.h Makefile # 注意下方两个命令行的行首必须是单个Tab字符,不能用空格代替 ${CC} -g -Wall -pthread -o sync sync.c prodcons.c producer.c consumer.c ln -sf sync assn4
修正时的必查细节
- 每个独立shell命令必须独占一行,不能和其他命令拼接在同一行,初学阶段不要用
;拼接命令,避免解析歧义 - 规则命令行前的缩进必须是Tab字符,使用空格缩进会触发make的解析错误
- 逐行核对所有源文件的文件名拼写,匹配本地实际存放的文件名
内容的提问来源于stack exchange,提问作者Westyn D
相关产品推荐
相关产品推荐

