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

从学习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

猜你喜欢

转载自blog.csdn.net/wyn126/article/details/79853972