在软件开发中,Makefile是一种非常常用的自动化工具。Makefile文件包含了一系列规则,用于编译、打包、测试等操作,可以帮助我们自动化这些操作,提高项目的管理和编译效率。本文将介绍Makefile中常用的命令,以及如何使用它们来编译和管理项目

make

make命令是最基本的命令,用于执行Makefile文件中的规则。Makefile是由一系列规则组成的,每个规则由目标、依赖和命令三部分组成。make会根据这些规则,自动确定哪些文件需要重新编译,哪些文件不需要编译。通常,我们可以使用如下命令运行make:

 make [options] [target]

其中,options是可选的参数,用于控制make的行为。例如,我们可以使用“-j”参数指定并行编译的数量。target是要编译的目标文件名,可以省略。如果省略,则默认执行Makefile文件中的第一个目标。

clean

clean命令用于删除生成的目标文件。在编译过程中,我们会生成一些中间文件和目标文件,这些文件可能会占用较多的磁盘空间。使用clean命令可以清理这些文件,释放磁盘空间。例如:

 clean:
    rm -rf *.o

这条规则的作用是删除所有以“.o”结尾的文件。

all

all命令用于生成所有的目标文件。通常,我们在Makefile中会定义多个目标,使用all命令可以一次性编译所有目标。例如:

 all: target1 target2 target3

这条规则的作用是编译target1、target2、target3三个目标。

install

install命令用于将生成的文件安装到指定的目录中。在编译完成后,我们通常需要将生成的可执行文件或库文件安装到系统中,以便其他程序使用。例如:

 install: all
    cp target /usr/local/bin/

这条规则的作用是将编译生成的target文件拷贝到“/usr/local/bin/”目录下。

uninstall

uninstall命令用于卸载已安装的文件。在安装完成后,我们可能需要卸载已安装的文件,例如进行版本回滚。例如:

 uninstall:
    rm /usr/local/bin/target

这条规则的作用是删除“/usr/local/bin/”目录下的target文件。

depend

depend命令用于自动更新源文件的依赖关系。在大型项目中,源文件之间可能存在复杂的依赖关系,当一个源文件发生变化时,需要重新编译依赖于它的所有文件。使用depend命令可以自动更新依赖关系,避免手动维护依赖关系。例如:

 depend:
    gcc -M *.c > .depend

这条规则的作用是生成一个.depend文件,保存所有源文件的依赖关系。

自定义命令

除了上述常用命令外,Makefile还支持自定义命令。例如,我们可以定义一个命令来运行项目的测试:

 test:
    ./run_tests

这条规则的作用是运行项目的测试脚本。

高级特性

Makefile还支持循环、条件语句等高级特性。例如,我们可以使用循环来编译多个源文件:

 objects = main.o foo.o bar.o
 
 all: $(objects)
 
 $(objects): %.o: %.c
    gcc -c $< -o $@

这条规则的作用是编译main.c、foo.c和bar.c三个源文件,生成对应的目标文件。其中,“%”表示通配符,表示匹配任意字符。

总结

以上是常用的Makefile命令,使用这些命令可以大大提高项目的管理和编译效率。另外,Makefile还支持循环、条件语句等高级特性,可以根据需要灵活使用。掌握这些命令和特性,可以让你更加高效地管理和编译软件项目。

最后

为了方便其他设备和平台的小伙伴观看往期文章:

微信公众号搜索:Let us Coding,关注后即可获取最新文章推送

看完如果觉得有帮助,欢迎 点赞、收藏、关注

Makefile 常用命令详解的更多相关文章

  1. hbase shell基础和常用命令详解(转)

    HBase shell的基本用法 hbase提供了一个shell的终端给用户交互.使用命令hbase shell进入命令界面.通过执行 help可以看到命令的帮助信息. 以网上的一个学生成绩表的例子来 ...

  2. samtools常用命令详解(转)

    转自:samtools常用命令详解 samtools的说明文档:http://samtools.sourceforge.net/samtools.shtml samtools是一个用于操作sam和ba ...

  3. cisco常用命令详解

    cisco常用命令详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.常用命令用法展示 1.命令行模式的来回切换 yinzhengjie>enable #从用户模式切换到 ...

  4. H3C常用命令详解

    H3C常用命令详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 1.关闭后台日志输出 <yinzhengjie>sys [yinzhengjie]undo info- ...

  5. hbase shell基础和常用命令详解

    HBase是Google Bigtable的开源实现,它利用Hadoop HDFS作为其文件存储系统,利用Hadoop MapReduce来处理HBase中的海量数据,利用Zookeeper作为协同服 ...

  6. Tmux 的常用命令详解

    Tmux 的常用命令详解  常用命令: tmux #开启tmux tmux ls #显示已有tmux列表(C-b s) tmux attach-session -t 数字 #选择tmux C-b c ...

  7. Hexo系列(三) 常用命令详解

    Hexo 框架可以帮助我们快速创建一个属于自己的博客网站,熟悉 Hexo 框架提供的命令有利于我们管理博客 1.hexo init hexo init 命令用于初始化本地文件夹为网站的根目录 $ he ...

  8. 【转载】windbg 常用命令详解

    windbg 常用命令详解 https://blog.csdn.net/chenyujing1234/article/details/7743460 vertarget 显示当前进程的大致信息 lmv ...

  9. DOS常用命令详解

    DOS常用命令详解 dir 列文件名 deltree 删除目录树 cls 清屏 cd 改变当前目录 copy 拷贝文件 diskcopy 复制磁盘 del 删除文件 format 格式化磁盘 edit ...

  10. Kubernetes,kubectl常用命令详解

    kubectl概述 祭出一张图,转载至 kubernetes-handbook/kubectl命令概述 ,可以对命令族有个整体的概念. 环境准备 允许master节点部署pod,使用命令如下: kub ...

随机推荐

  1. select_for_update悲观锁

    例子,银行存款和撤销方法 1.用户A提取帐户 - 余额为100 $. 2.用户B提取帐户 - 余额为100 $. 3.用户B退出30 $ - 余额更新为100 $ - 30 $ = 70 $. 4.用 ...

  2. python基础安装虚拟环境

    1.pip install virtualenv或者pip3 install virtualenv 2.在要存放虚拟环境的地方创建一个venv文件夹,用来存放所有创建的虚拟环境,方便查找与管理 3.m ...

  3. 第121篇: DOM常用类型(Document、Element)

    好家伙,本篇为<JS高级程序设计>第十四章"DOM编程"学习笔记   1.Document类型 Document 类型是 JavaScript 中表示文档节点的类型. ...

  4. Unity3D之OnTriggerEnter和OnCollisionEnter

    OnCollisionEnter方法要求碰撞的发起方必须拥有刚体,而被碰撞方有没有刚体并不重要; OnTriggerEnter方法则对此没有要求,只需要碰撞双方有一个具有刚体即可触发,当有物体勾选is ...

  5. ClickHouse学习笔记--ClickHouse的整体特性

    本文主要包含如下内容: ClickHouse适用场景 ClickHouse缺点 ClickHouse优点 ClickHouse表引擎-合并树 ClickHouse表引擎-合并树-稀疏索引 ClickH ...

  6. 3. JVM运行时数据区

    1. 运行时数据区概述 前面的章节中已经将类的加载过程大致过程说清楚了,此时类已经加载到内存中,,后面就是运行时数据区的各个组件的工作了 由上图可以看出来, jvm将class字节码加载完成后,后面运 ...

  7. C++ map //map/multimap容器 //map容器 构造和赋值 //map大小 和 交换 //map插入和删除 //map查找和统计 //map容器排序

    1 //map/multimap容器 //map容器 构造和赋值 //map大小 和 交换 2 //map插入和删除 //map查找和统计 //map容器排序 3 4 #include<iost ...

  8. snipaste 替换 微信截图快捷键 F3贴图功能实在是太帅了 - 软件推荐

    snipaste 替换 微信截图快捷键 这个软件很久之前就知道,一直也没觉得可以替换微信的截图功能,毕竟能懒就懒. 今天同事又推荐 用了下,觉得确实ok. https://zh.snipaste.co ...

  9. config.js 多人同步更新 解决方案 多项目公用一套config.js dev

    index.html <script type='text/javascript' src='<%= BASE_URL %>config.js?${Math.random().toS ...

  10. 基于BES2500芯片的方案开发总结和反思

    前记   虽然蓝牙芯片现在非常多,可是一旦想做一些差异化的产品时候,能用的非常少.在和客户的反复斟酌中,最终选择了BES2500来开发这款新的产品.这里面是基于自身的实力,产品定位和芯片诉求多重考量的 ...