【Linux】题解:Linux环境基础开发工具——make与Makefile

摘要:Makefile是一个文件定义了一系列的规则来指定编译过程以及更复杂的功能操作,make是一个命令工具,是一个解makefile中指令的命令工具。


文章目录

  • 【Linux】题解:Linux环境基础开发工具——make与Makefile
    • 一. 概述
    • 二. make与Makefile
    • 三. 依赖关系与依赖方法
    • 四. 补充:特殊符号

一. 概述

Linux作为一个操作系统,有着自己开发程序的方式。各位都知道,Linux主要面向的是像程序员这样的群体,因此缺少像VS或者Pycharm等那样的庞大的商用的集成开发工具。不过Linux也是可以做到,像其他IDE那样进行开发,主要的实现方式就是通过指令的形式进行完成。

Linux环境基础开发工具包括六大板块:

  • 学习yum工具,进行软件安装
  • 掌握vim编辑器使用,学会vim的简单配置
  • 掌握gcc/g++编译器的使用,并了解其过程,原理
  • 掌握简单gdb使用于调试
  • 掌握简单的Makefile编写,了解其运行思想
  • 学习 git 命令行的简单操作, 能够将代码上传到码云上

最后,还会通过使用Linux环境下基础开发工具,完成一个C语言的小示例——进度条

本篇将会介绍关于Makefile的内容。

二. make与Makefile

Makefile是一个文件,在一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,对于makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作。makefile带来的好处就是——“自动化编译”,一旦写好,只需要一个make命令,整个工程完全自动编译,极大的提高了软件开发的效率。

make是一个命令工具,是一个解释makefile中指令的命令工具,一般来说,大多数的IDE都有这个命令,比如:Delphi的make,Visual C++的nmake,Linux下GNU的make。可见,makefile都成为了一种在工程方面的编译方法。

要学会Makefile文件的书写,最主要的就是掌握依赖关系与书写依赖方法。

三. 依赖关系与依赖方法

对于依赖关系,可以认为要生成相应对象,就要通过另外一个对象去产生,好比gcc test.c -o test,此时的test就是依赖于test.c 文件。而依赖方法就是如何通过被依赖关系产生依赖对象的,而gcc test.c -o test就是依赖方法。两者之间的关系时相辅相成,既要有关系,也要有依赖方法

如果需要编写一个Makefile文件,首先touch Makefile一个文件,在通过vim编写,示例如下:

[lht@VM-12-7-centos Blog_Develope]$ touch Makefile
[lht@VM-12-7-centos Blog_Develope]$ vim Makefile
[lht@VM-12-7-centos Blog_Develope]$ cat Makefile
test:test.cgcc test.c -o test -std=C99.PHONY:clean
clean:rm -f test
[lht@VM-12-7-centos Blog_Develope]$ ll
total 28
-rw-rw-r-- 1 lht lht    74 Oct 30 22:46 Makefile
-rw-rw-r-- 1 lht lht   226 Oct 30 20:19 test.c
[lht@VM-12-7-centos Blog_Develope]$ make
gcc test.c -o test -std=c99
[lht@VM-12-7-centos Blog_Develope]$ ./test
result = 5050
[lht@VM-12-7-centos Blog_Develope]$ make clean
rm -f test
[lht@VM-12-7-centos Blog_Develope]$ ll
total 28
-rw-rw-r-- 1 lht lht    74 Oct 30 22:46 Makefile
-rw-rw-r-- 1 lht lht   226 Oct 30 20:19 test.c

注意看cat后文件显示,通过设定依赖关系:test:test.c,在下一行通过Tab格式化后,设定依赖方法:gcc test.c -o test -std=C99,通过make,就可以默认编译第一条语句,也可以通过输入make test进行编译工作。因此,对于要生成过程一般是放在最前面的,直接make就可以生成可执行文件了。

对于Makefile中的.PHONY可以称之为修饰对应的符号,类似于伪目标的概念,其特征是总是可执行的,比如在此的clean就是总是可执行的符号,像clean这种没有被第一个目标文件直接或间接关联,那么它后面所定义的命令将不会被自动执行,使用了类似伪目标的概念,可以用make执行clean,即命令——“make clean”,以此来清除所有的目标文件,以便重编译。

更重要的是,clean可以作为项目清除的命令,直接使用.PHONY来定义伪目标简化项目清除的步骤

四. 补充:特殊符号

Makefile可以通过特殊符号来直接将依赖关系对应到依赖方法上,如下示例:

[lht@VM-12-7-centos Blog_Develope]$ cat Makefile
test:test.cgcc -o $@ $^.PHONY:clean
clean:rm -f test
[lht@VM-12-7-centos Blog_Develope]$ make
gcc -o test test.c

其中$@对应的是生成文件,$^对应的是所依赖的对象,可以通过这种方式简化Makefile的书写


补充:

  1. 代码将会放到:https://gitee.com/liu-hongtao-1/linux_-review ,欢迎查看!
  2. 欢迎各位点赞、评论、收藏与关注,大家的支持是我更新的动力,我会继续不断地分享更多的知识!

【Linux】基础:Linux环境基础开发工具——make与Makefile相关推荐

  1. go linux 开发工具,golang的基础语法和常用开发工具详解

    golang的基础语法 golang的基础语法和其他语言大部分都差别不大,如果我们有学习过其他语言,比如JavaScript,php,java,python等,有其他语言的语法基础,那么我们学习gol ...

  2. MacBook Linux Windows C和C++开发工具介绍

    MacBook Linux Windows C和C++开发工具介绍 本人主要从事Java开发,所以IDEA用的比较多, Golang也开发了几年,使用的是Goland或IDEA工具, 最近在学习C++ ...

  3. python django开发工具_利用pyCharm编辑器创建Django项目开发环境-python开发工具第一篇...

    [前置说明] 1.django环境与python对应关系: Django version Python versions 1.11 2.7, 3.4, 3.5, 3.6, 3.7 (added in ...

  4. linux重装eclipse_Linux环境安装Eclipse工具开发

    2.上传到虚拟机进行解压缩操作: [hadoop@slaver1 package]$ tar -zxvf apache-maven-3.5.3-bin.tar.gz -C /home/hadoop/s ...

  5. Linux ubuntu下C/C++开发工具安装和开发环境搭建(c/c++,CLion工具)

    ubuntu下 C/C++ 开发工具选择和环境搭建 1.开发工具下载及安装 开发工具选用 CLion,进入终端输入 sudo snap install clion --classic 等待执行完成后C ...

  6. c#物联网_C# 基础知识系列- 16 开发工具篇

    0. 前言 这是C# 基础知识系列的最后一个内容讲解篇,下一篇是基础知识-实战篇.这一篇主要讲解一下C#程序的结构和主要编程工具. 1. 工具 工欲善其事必先利其器,在实际动手之前我们先来看看想要编写 ...

  7. 【嵌入式】Linux开发工具make及makefile设计

    make工具及makefile设计 make工具及makefile设计 Makefile 设计示例 Makefile 规则--构成 Makefile 变量(宏) Makefile 条件判断 Makef ...

  8. 《Linux操作系统》命令与开发工具

    一.填空题 l. Linux是一个基于命令行的操作系统,Linux命令中的选项分为和_. 2. Linux操作系统秉持"一切皆文件"的思想,将其中的文件.设备等都作为文件来操作和处 ...

  9. 软件环境、硬件环境、开发工具

    软件环境:一般包括数据库(mysql,sqlserver,oracle,db2),运行的中间件,即应用服务器,如tomcat,jetty,jboss,weblogic,webphere,以及运行的操作 ...

最新文章

  1. JSON 列转行的一小段无用代码
  2. nagios配置安装
  3. C++ 中类的内存布局
  4. 最简单的基于FFMPEG的封装格式转换器(无编解码)
  5. Java如何根据IP获取当前定位
  6. 三星java3倍拍照手机_全世界拍照最强的两款手机,一个是三星,一个是它
  7. 大数据学习笔记29:Hadoop压缩机制演示
  8. 图像处理常见算法(C++/OpenCV)
  9. Windows下用VS2015+MSYS编译OpenH264
  10. l2逐笔接口更新的频率是多少?
  11. Xilinx HLS 学习笔记1
  12. 什么无线桥接一直正在链接服务器失败,无线桥接网络常见问题故障排除
  13. Eclipse设置运行内存大小
  14. php 固定表头,PHPExcel如何冻结(锁定)表头
  15. deepin 下使用节能模式不降低屏幕亮度
  16. 耳机电声测试仪软件,CLIO 11电声测试仪
  17. 【HTML 教程系列第 11 篇】HTML 中常用的文本格式化标签
  18. Linux sed使用方法
  19. 某期间用到的溯源技巧
  20. 男生学习Java软件开发更有优势吗及自学的难度如何?[图]

热门文章

  1. 又一国家级测速软件上线:绿色免费,支持5G 和千兆测速
  2. 跨平台CMake判断当前平台是Linux还是Windows
  3. 自己编译vim8.0并安装插件
  4. Heat Transfer|L2_Introduction on Heat Conduction
  5. 没有学历可以学计算机编程吗,没学历可以学开发吗?
  6. stm8 代码一键生成方便快捷
  7. 【洛谷 P2257】YY的GCD 【莫比乌斯反演 经典题目】
  8. 透过大型企业成功案例,看 IoT 物联网平台技术选型
  9. 26岁转行自学Java,半年多的努力没有白费,拿到了9K的薪资!
  10. You have divergent branches and need to specify how to reconcile the