Makefile的书写规则以及/usr/bin/ld: cannot find -lc

本文介绍Makefile的基础知识及其实战应用,探讨如何通过Makefile实现工程项目的自动化编译,提高软件开发效率。文章详细讲解了Makefile的编写方法,并解决了在使用静态链接库时遇到的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

从学习Linux那一刻开始,一直就有人说,能不能写Makefile是考验你是否具备完成大型工程的能力。
makefile关系到了整个工程的编译规则。一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因为makefile就像一个Shell脚本一样,其中也可以执行操作系统的命令。

makefile带来的好处就是——“自动化编译”,一旦写好,只需要一个make命令,整个工程完全自动编译,极大的提高了软件开发的效率。make是一个命令工具,是一个解释makefile中指令的命令工具,一般来说,大多数的IDE都有这个命令。
关于程序的编译和链接

这里写图片描述
下来我们来了解关于Makefile的书写
假设我们需要编译一个test.c文件,Makefile的编写方法如下
第一种写法
这里写图片描述

第二种写法
这里写图片描述
一般要使用静态链接库,只需要给依赖的文件名后面接一个XXX_static即可, 最后面再加上-XXX
现象:执行gcc静态编译程序时报错:

/usr/bin/ld: cannot find -lc

collect2: ld returned 1 exit status
make: * [gcc_dry2] Error 1
(或者调用Makefile编译时报错)

原因:程序链接需要静态库,系统没有安装静态库导致报错

解决:安装静态库

sudo yum install glibc-static

这里写图片描述
Makefile的执行只需要执行一句make语句即可进行编译,
./test_static //在前台运行 ./表示系统搜索可执行环境变量的路径
./test_static & //在后台运行

当需要改掉Makefile里面的依赖文件是只需在命令模式下进行替换:%s/test/main/g    //这里是指将test替换为main
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值