位置: IT常识 - 正文

Linux 下 Make 命令实例详解(linux常用命令make)

编辑:rootadmin
Linux 下 make 命令是系统管理员和程序员用的最频繁的命令之一。管理员用它通过命令行来编译和安装很多开源的工具,程序员用它来管理他们大型复杂的项目编译问题... 16-12-13

推荐整理分享Linux 下 Make 命令实例详解(linux常用命令make),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:linux makefile命令,linux里make命令,linux常用命令make,linux makefile命令,linux make dir,linux常用命令make,linux makefile 教程 非常详细,且易懂,linux中make,内容如对您有帮助,希望把文章链接给更多的朋友!

Linux 下 make 命令是系统管理员和程序员用的最频繁的命令之一。管理员用它通过命令行来编译和安装很多开源的工具,程序员用它来管理他们大型复杂的项目编译问题。本文我们将用一些实例来讨论 make 命令背后的工作机制。

Make 如何工作的

对于不知道背后机理的人来说,make 命令像命令行参数一样接收目标。这些目标通常存放在以 “Makefile” 来命名的特殊文件中,同时文件也包含与目标相对应的操作。更多信息,阅读关于 Makefiles 如何工作的系列文章。

当 make 命令第一次执行时,它扫描 Makefile 找到目标以及其依赖。如果这些依赖自身也是目标,继续为这些依赖扫描 Makefile 建立其依赖关系,然后编译它们。一旦主依赖编译之后,然后就编译主目标(这是通过 make 命令传入的)。

现在,假设你对某个源文件进行了修改,你再次执行 make 命令,它将只编译与该源文件相关的目标文件,因此,编译完最终的可执行文件节省了大量的时间。

Make 命令实例

下面是本文所使用的测试环境:

OS —— Ubunut 13.04Shell —— Bash 4.2.45Application —— GNU Make 3.81

下面是工程的内容:

$ ls anotherTest.c Makefile test.c test.h

下面是 Makefile 的内容:

all: test test: test.o anotherTest.o gcc -Wall test.o anotherTest.o -o testtest.o: test.c gcc -c -Wall test.c anotherTest.o: anotherTest.c gcc -c -Wall anotherTest.c clean: rm -rf *.o test

现在我们来看 Linux 下一些 make 命令应用的实例:

1. 一个简单的例子

为了编译整个工程,你可以简单的使用 make 或者在 make 命令后带上目标 all。

$ make gcc -c -Wall test.c gcc -c -Wall anotherTest.c gcc -Wall test.o anotherTest.o -o test

你能看到 make 命令第一次创建的依赖以及实际的目标。

如果你再次查看目录内容,里面多了一些 .o 文件和执行文件:

$ ls anotherTest.c anotherTest.o Makefile test test.c test.h test.oLinux 下 Make 命令实例详解(linux常用命令make)

现在,假设你对 test.c 文件做了一些修改,重新使用 make 编译工程:

$ make gcc -c -Wall test.c gcc -Wall test.o anotherTest.o -o test

你可以看到只有 test.o 重新编译了,然而另一个 Test.o 没有重新编译。

现在清理所有的目标文件和可执行文件 test,你可以使用目标 clean:

$ make cleanrm -rf *.o test$ lsanotherTest.c Makefile test.c test.h

你可以看到所有的 .o 文件和执行文件 test 都被删除了。

2. 通过 -B 选项让所有目标总是重新建立

到目前为止,你可能注意到 make 命令不会编译那些自从上次编译之后就没有更改的文件,但是,如果你想覆盖 make 这种默认的行为,你可以使用 -B 选项。

下面是个例子:

$ makemake: Nothing to be done for `all’.$ make -Bgcc -c -Wall test.cgcc -c -Wall anotherTest.cgcc -Wall test.o anotherTest.o -o test

你可以看到尽管 make 命令不会编译任何文件,然而 make -B 会强制编译所有的目标文件以及最终的执行文件。

3. 使用 -d 选项打印调试信息

如果你想知道 make 执行时实际做了什么,使用 -d 选项。

这是一个例子:

$ make -d | moreGNU Make 3.81Copyright (C) 2006 Free Software Foundation, Inc.This is free software; see the source for copying conditions.There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR APARTICULAR PURPOSE.This program built for x86_64-pc-linux-gnuReading makefiles…Reading makefile `Makefile’…Updating makefiles….Considering target file `Makefile’.Looking for an implicit rule for `Makefile’.Trying pattern rule with stem `Makefile’.Trying implicit prerequisite `Makefile.o’.Trying pattern rule with stem `Makefile’.Trying implicit prerequisite `Makefile.c’.Trying pattern rule with stem `Makefile’.Trying implicit prerequisite `Makefile.cc’.Trying pattern rule with stem `Makefile’.Trying implicit prerequisite `Makefile.C’.Trying pattern rule with stem `Makefile’.Trying implicit prerequisite `Makefile.cpp’.Trying pattern rule with stem `Makefile’.--More--

这是很长的输出,你也看到我使用了 more 命令来一页一页显示输出。

4. 使用 -C 选项改变目录 你可以为 make 命令提供不同的目录路径,在寻找 Makefile 之前会切换目录的。

这是一个目录,假设你就在当前目录下:

$ ls file file2 frnd frnd1.cpp log1.txt log3.txt log5.txtfile1 file name with spaces frnd1 frnd.cpp log2.txt log4.txt

但是你想运行的 make 命令的 Makefile 文件保存在 ../make-dir/ 目录下,你可以这样做:

$ make -C ../make-dir/ make: Entering directory `/home/himanshu/practice/make-dir’ make: Nothing to be done for `all’. make: Leaving directory `/home/himanshu/practice/make-dir

你能看到 make 命令首先切到特定的目录下,在那执行,然后再切换回来。

5. 通过 -f 选项将其它文件看作 Makefile

如果你想将重命名 Makefile 文件,比如取名为 my_makefile 或者其它的名字,我们想让 make 将它也当成 Makefile,可以使用 -f 选项。

make -f my_makefile

通过这种方法,make 命令会选择扫描 my_makefile 来代替 Makefile。

本文链接地址:https://www.jiuchutong.com/zhishi/274853.html 转载请保留说明!

上一篇:Win10 Version 1909累积更新补丁KB4601315:修复诸多 BUG

下一篇:如何输入特殊符号(如何输入特殊符号带圈数字11)

  • 公司网站制作策划案包括哪些基本内容(公司网站制作策略有哪些)

    公司网站制作策划案包括哪些基本内容(公司网站制作策略有哪些)

  • 挣扎,我喜欢用这个词去形容成长(用挣扎来造句)

    挣扎,我喜欢用这个词去形容成长(用挣扎来造句)

  • sony耳机防伪码在哪(索尼耳机防伪标签)

    sony耳机防伪码在哪(索尼耳机防伪标签)

  • 荣耀9x升降屏是什么意思(荣耀九x升降式摄像头怎么开启)

    荣耀9x升降屏是什么意思(荣耀九x升降式摄像头怎么开启)

  • 快手怎么看注册几年了(快手怎么看注册日期和时间)

    快手怎么看注册几年了(快手怎么看注册日期和时间)

  • 电脑进水后可以正常使用有问题吗(电脑进水后可以正常使用)

    电脑进水后可以正常使用有问题吗(电脑进水后可以正常使用)

  • 扫描文件是什么格式(扫描文件是什么原理)

    扫描文件是什么格式(扫描文件是什么原理)

  • 钉钉作业修改后老师知道吗(钉钉作业修改后再发布有记录吗)

    钉钉作业修改后老师知道吗(钉钉作业修改后再发布有记录吗)

  • 华为mate30pro有红外线遥控功能吗(华为mate30pro有红色的吗)

    华为mate30pro有红外线遥控功能吗(华为mate30pro有红色的吗)

  • 为什么手机充了话费还是停机(为什么手机充了话费没有短信提醒)

    为什么手机充了话费还是停机(为什么手机充了话费没有短信提醒)

  • word间距是什么意思(word字间距在哪里)

    word间距是什么意思(word字间距在哪里)

  • air2能用apple pencil吗(Air2能用几年)

    air2能用apple pencil吗(Air2能用几年)

  • 固态硬盘是装在主板上吗(固态硬盘是装在c盘吗)

    固态硬盘是装在主板上吗(固态硬盘是装在c盘吗)

  • 电子媒介有哪三种(电子媒介的作用)

    电子媒介有哪三种(电子媒介的作用)

  • 苹果11pro max录屏在哪里(苹果11pro max录屏没有声音)

    苹果11pro max录屏在哪里(苹果11pro max录屏没有声音)

  • 三星滚动截屏操作(三星滚动截屏操作S21)

    三星滚动截屏操作(三星滚动截屏操作S21)

  • 小米盒子怎么调整屏幕大小(小米盒子怎么调整画面比例)

    小米盒子怎么调整屏幕大小(小米盒子怎么调整画面比例)

  • wps没保存的文档怎么找回(怎么找wps没保存的文档)

    wps没保存的文档怎么找回(怎么找wps没保存的文档)

  • iphone11还有刘海吗(苹果11刘海里包含什么)

    iphone11还有刘海吗(苹果11刘海里包含什么)

  • 怎么让小说自己读出来(怎么让小说自己读软件)

    怎么让小说自己读出来(怎么让小说自己读软件)

  • 实况照片怎么发微信(实况照片怎么发朋友圈才会动)

    实况照片怎么发微信(实况照片怎么发朋友圈才会动)

  • 一师一优课视频传不上去(一师一优课视频播放不出来)

    一师一优课视频传不上去(一师一优课视频播放不出来)

  • 线路和无线导致路由器网速慢?路由器网速慢怎么办呢?(无线电路问题)

    线路和无线导致路由器网速慢?路由器网速慢怎么办呢?(无线电路问题)

  • Vue 移动端、PC 端适配(vue移动端pc端适配方案)

    Vue 移动端、PC 端适配(vue移动端pc端适配方案)

  • phpcms怎么添加统计功能(phpcms使用教程)

    phpcms怎么添加统计功能(phpcms使用教程)

  • acca b/f
  • 其他应收款是负数怎么报税
  • 个税三代手续费返还增值税报表怎么填
  • 小微企业城建税优惠政策2022
  • 政府补贴流程
  • 长期待摊费用税前扣除
  • 企业所得税和增值税都要交吗
  • 土地转让如何缴纳增值税
  • 银行承兑汇票贴现率多少
  • 租赁厂房发生的改造装修费用
  • 资产负债表的编制时间
  • 企业所得税税收优惠方式有哪些
  • 跨年成本发票红冲怎么做会计分录
  • 法律规定临时工工资最迟多久结清
  • 客户给现金
  • 个人申请代开普需要资料
  • 差旅费可以支取现金吗
  • 收到美金货款
  • 捐赠固定资产资产处置损益
  • 联营 保底
  • 罕见病药品进口要求
  • 苹果中国区副总裁
  • 限定性净资产要算在现金流量表里吗
  • 进入苹果icloud
  • mce是什么文件格式
  • thinkphp多数据库连接
  • b/s架构的正确解释方式
  • php ftp函数
  • 企业发给员工的食堂补贴需要交个税吗
  • vue onblur
  • 结算借款的账务处理办法
  • php exec python
  • vue3使用教程
  • js数组分组并排序
  • 经典动画动漫
  • vue watch和computed
  • 二手车交易发票怎么收费
  • 没有发票以及收款怎么办
  • 非公党建党费收缴
  • 提取法定盈余公积的公式
  • SQL Server 在Management Studio中使用Web浏览器
  • 短期投资理财是
  • 发票上密码区数字什么意思
  • 销售车位应怎么交税
  • 个人所得税汇算清缴
  • 员工工资是哪个会计科目
  • c#连接数据库的基本步骤是什么
  • 信用减值损失与资产减值损失
  • 小规模纳税人如何升级为一般纳税人
  • 不符合资本化的长期借款利息计入什么科目
  • 电子承兑背书一般多久到账
  • 收到费用发票分录
  • 社保月费基数
  • 端午节发放的现金福利会计处理
  • 加息法实际利率计算公式
  • 充油卡未收发票怎么办
  • 管家婆进货单科目名称怎么录入?
  • 申报财产租赁合同怎么写
  • 委托方和受委托方的法律关系
  • 外购入库暂估补差单
  • 敬老院的会计科目
  • 出纳和记账会计哪个好
  • 建账前应考虑什么问题
  • 房地产开发企业开发成本包括哪些项目
  • 游戏与操作系统不兼容
  • freebsd windows
  • apache zipfile
  • win8.1快捷键
  • windows累积更新失败怎么办
  • win10纯净系统安装教程
  • 微信小程序列表显示
  • redis开机自动启动linux
  • python urljoin
  • shell编程简单实例
  • JavaScript的函数定义
  • Listview的onItemClickListener无法响应的解决方法
  • jquery中的each方法
  • jquery给下拉框添加选项
  • js uridecode
  • 统一社会信用代码有什么用
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设