位置: 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)

  • 金税三期怎么合理避税
  • 借款发生的利息费用
  • 租房子没有
  • 即征即退进项税额为哪些
  • 资本化利息支出在哪个科目
  • 今年成立的公司,残保金是否要申报
  • 其他应收款账目
  • 一般纳税人软件销售税率
  • 企业新增固定资产流程图
  • 私售发票如何处罚
  • 房地产开发项目手册备案
  • 建筑工地的零星补单是指什么意思
  • 无形资产除了专利还有什么
  • 承租承包经营个人所得税
  • 商务旅行人身意外伤害险在税前扣除范围内吗?
  • 借调员工的工资怎么入账
  • 案例分析一般纳税人的税负率怎么计算?
  • 开了增值税专用发票对方不付款可以申请冻结对方公帐嘛
  • 企业的其他业务收入
  • 建筑公司异地预缴增值税
  • 废料销售成本怎么计算
  • window10切换win7
  • Radio.exe - Radio是什么进程 有什么用
  • 备用金怎么填写记账凭证
  • 企业出租房屋怎样报税
  • 存货怎么预估
  • 小微企业减免附加税政策
  • element-ui dialog
  • react 刷新
  • 张家界天门山介绍简介
  • win10系统的安装
  • 工程物资已到发票怎么开
  • 一只什么海鸥填空
  • 分公司不享受小规模纳税
  • 财务费用为什么流向债权人
  • nodejs官方文档
  • reprovision签名失败error
  • 电子税务局附加税退税在哪看
  • 什么是对公账户和个人账户
  • 个人税收收入退税政策
  • 新法典离职
  • 编写脚本语言
  • 个体户跨季领取发票流程
  • 库存不多
  • 什么经营范围是营业执照
  • 什么是俗称的汇款
  • 税前可扣除的税费
  • 备用金用发票核销去哪核销
  • 业务往来接受礼品
  • 政府工会经费计入什么科目
  • 累计摊销的会计分录有哪些
  • 进项税额和销项税额有什么区别
  • 保险没有合同算生效吗
  • 个体工商户要进行汇算清缴吗
  • 发明专利权限的期限是多少年
  • 收到实收资本的现金流
  • 小微企业免税如何做账
  • 住宿费记入成本会计分录
  • 专项应付款余额转入资本公积的规定
  • 民间非营利组织会计制度最新版
  • 蔬菜公司开具专票可以抵扣吗
  • 五险一金是否需缴纳
  • 利润总额与应纳税所得额的差异国内动态
  • 查询一个字段有哪些值
  • Mac系统怎么设置ftp
  • 苹果电脑截图快捷键
  • 苹果mac系统如何升级最新版本
  • iphone看mac
  • linux sleep命令有什么用
  • 怎么看清水印
  • win10未检测到任何网络硬件
  • win7系统安装软件乱码
  • win7命令提示符在哪
  • opengl使用教程
  • shell 四则运算
  • javascript entries
  • 国家税务总局江西省国家税务局
  • 怎么查公司税务等级
  • 税控盘换新会影响旧盘数据吗
  • 美丽重生李晓晓免费阅读
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设