在软件开发中,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. Python全栈面试题及知识点总结

    Python全栈面试题 Python全栈阶段总结:https://github.com/HkwJsxl/PythonFullStack/tree/master/Notes Python基础 基础 逻辑 ...

  2. AI与人类联手,智能排序人类决策:RLHF标注工具打造协同标注新纪元,重塑AI训练体验

    AI与人类联手,智能排序人类决策:RLHF标注工具打造协同标注新纪元,重塑AI训练体验 在大模型训练的 RLHF 阶段,需要人工对模型生成的多份数据进行标注排序,然而目前缺乏开源可用的 RLHF 标注 ...

  3. C++socket中select函数

    文章参考 https://www.cnblogs.com/shmilxu/p/4835873.html

  4. Java // 使用二维数组打印 10 行杨辉三角

    1 // 使用二维数组打印 10 行杨辉三角 2 public static void main(String[] args) 3 { 4 //1.声明 并初始化二维数组 5 int[][]yangh ...

  5. 玩转Vue3之Composables

    前言 Composables 称之为可组合项,熟悉 react 的同学喜欢称之为 hooks ,由于可组合项的存在,Vue3 中的组件之间共享状态比以往任何时候都更容易.这种新范例引入了一种更有组织性 ...

  6. ANDROID : NEW IDEA

    •前言 学习了 Android 开发后,小脑袋瓜中时不时会蹦跶出一些想法: 这些想法大都是我现在实现不了的,所以就需要记录一下,等学到相关知识时,在着手解决. •NEW IDEA 1 将一款 APP( ...

  7. 搭建一个Java项目可直接拿去使用的通用工具类

    1.通用枚举类 import lombok.Getter; /** * @Description 状态码定义约束,共6位数,前三位代表服务,后3位代表接口 * 比如 商品服务210,购物车是220.用 ...

  8. git的 .gitignore 配置概述

    git的 .gitignore 配置概述 学习背景:自己在使用git时发现有时会上传很多无用的配置文件,或者在项目中已经包含一个本地的git仓库,导致上一级项目上传总是报错,所以学习采用gitigno ...

  9. 软件架构(四)单体架构(Monolithic Architecture)

    系列目录 软件架构(一)概览 软件架构(二)编程语言的历史 软件架构(三)名词解释:架构.设计.风格.模式 软件架构(四)单体架构(Monolithic Architecture) 软件架构(五)分层 ...

  10. Kubernetes-一文详解ServiceAccount与RBAC权限控制

    一.ServiceAccount 1.ServiceAccount 介绍 首先Kubernetes中账户区分为:User Accounts(用户账户) 和 Service Accounts(服务账户) ...