Makefile 常用命令详解
在软件开发中,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 常用命令详解的更多相关文章
- hbase shell基础和常用命令详解(转)
HBase shell的基本用法 hbase提供了一个shell的终端给用户交互.使用命令hbase shell进入命令界面.通过执行 help可以看到命令的帮助信息. 以网上的一个学生成绩表的例子来 ...
- samtools常用命令详解(转)
转自:samtools常用命令详解 samtools的说明文档:http://samtools.sourceforge.net/samtools.shtml samtools是一个用于操作sam和ba ...
- cisco常用命令详解
cisco常用命令详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.常用命令用法展示 1.命令行模式的来回切换 yinzhengjie>enable #从用户模式切换到 ...
- H3C常用命令详解
H3C常用命令详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 1.关闭后台日志输出 <yinzhengjie>sys [yinzhengjie]undo info- ...
- hbase shell基础和常用命令详解
HBase是Google Bigtable的开源实现,它利用Hadoop HDFS作为其文件存储系统,利用Hadoop MapReduce来处理HBase中的海量数据,利用Zookeeper作为协同服 ...
- Tmux 的常用命令详解
Tmux 的常用命令详解 常用命令: tmux #开启tmux tmux ls #显示已有tmux列表(C-b s) tmux attach-session -t 数字 #选择tmux C-b c ...
- Hexo系列(三) 常用命令详解
Hexo 框架可以帮助我们快速创建一个属于自己的博客网站,熟悉 Hexo 框架提供的命令有利于我们管理博客 1.hexo init hexo init 命令用于初始化本地文件夹为网站的根目录 $ he ...
- 【转载】windbg 常用命令详解
windbg 常用命令详解 https://blog.csdn.net/chenyujing1234/article/details/7743460 vertarget 显示当前进程的大致信息 lmv ...
- DOS常用命令详解
DOS常用命令详解 dir 列文件名 deltree 删除目录树 cls 清屏 cd 改变当前目录 copy 拷贝文件 diskcopy 复制磁盘 del 删除文件 format 格式化磁盘 edit ...
- Kubernetes,kubectl常用命令详解
kubectl概述 祭出一张图,转载至 kubernetes-handbook/kubectl命令概述 ,可以对命令族有个整体的概念. 环境准备 允许master节点部署pod,使用命令如下: kub ...
随机推荐
- 鸿蒙开发学习(二)之ArkUI
目录 UI开发 布局 布局选择 布局位置 组件 容器组件 row.column RelativeContainer 列表 Tabs 子组件 页面路由 GitHub地址,欢迎star HmDemo: 鸿 ...
- 在矩池云使用ChatGLM-6B & ChatGLM2-6B
ChatGLM-6B 和 ChatGLM2-6B都是基于 General Language Model (GLM) 架构的对话语言模型,是清华大学 KEG 实验室和智谱 AI 公司于 2023 年共同 ...
- 01、NATS基础介绍
01.NATS基础介绍 项目中使用到了 NATS,但是之前并没有接触过,所以特意去学习了下,网上找了些资料,相对来说,都不是很全的介绍,所以特意记录下笔记,方便自己掌握,也希望可以帮助到其他小伙伴. ...
- Java 常用类 String的常用方法(2)
1 /** 2 * String 常用方法(2) 3 * boolean endsWith(String suffix):测试此字符串是否以指定的后缀结束 4 * boolean startsWith ...
- Java 自定义数组的工具类
1 /** 2 * 3 * @Description 自定义数组的工具类 4 * @author Bytezero·zhenglei! Email:420498246@qq.com 5 * @vers ...
- Linux性能监控(二)-top
top命令可以用来监控服务器CPU.内存的运行情况,是Linux一个经常使用到的命令. 基本用法 第一行 显示当前系统运行信息,系统当前时间是23:23:21,运行了315days,当前有2个用户登录 ...
- FastStone Capture 屏幕录像软件推荐 支持录像的时候放大屏幕
FastStone Capture(屏幕截图软件)v9.7中文注册版 http://www.ucbug.com/soft/25602.html
- vscode 翻译插件推荐 Easy Translator,只因为有音标,和位置好
vscode 翻译插件推荐 Easy Translator,只因为有音标,和位置好
- C++字符串编码转换
C++中字符串有很多种类,详情参考C++中的字符串类型.本文主要以string类型为例,讲一下字符串的编码,选择string主要是因为: byte是字符串二进制编码的最小结构,字符串本质上就是一个by ...
- shell实现简单的数组排序
c++代码 int nums[8]={1,2,1,3,4,2,5,6}; int length=8; for(int i=0;i<length;i++){ for(int j=i+1;j< ...