linux系统的编译命令怎么用
发布时间 - 2023-05-23 00:00:00 点击率:次
linux系统的编译命令是“Make”。在linux系统中,make是一个非常重要的编译命令,管理员用它通过命令行来编译和安装很多开源的工具,程序员用它来管理他们大型复杂的项目编译问题。Make被用于自动化编译大型程序的任务,它可以自动检测程序中需要重新编译的部分,并下发相应的编译指令。
Make简介
make 是 linux 系统的实用程序。它被用来管理大型程序的自动编译任务,自动判断程序的哪个部分需要重新编译,并发送编译指令。虽然,我们最常见于 C 语言程序的编译。但是,make 不限于某一特定语言,凡是可以通过 shell 命令来运行编译器的语言都可以使用 make 。除此之外,你甚至可以用 make 描述任何构建任务,这些任务中,文件需要在其依赖的文件发生变动后自动更新。
Make 如何工作的
Make 命令对于不熟悉其背后机理的人来说,就像命令行参数一样接受目标。通常,这些操作被存储在名为“Makefile”的特殊文件中,并且与目标相对应。更多信息,阅读关于 Makefiles 如何工作的系列文章。
Make命令在第一次执行时,会扫描Makefile以查找目标和相应的依赖关系。如果这些依赖项也需要被编译成目标,就要继续扫描 Makefile 并建立它们的依赖关系,接着进行编译。一旦主要依赖项完成编译,就会编译主目标(这是通过make命令输入的)。
现在,假设你对某个源文件进行了修改,你再次执行 make 命令,它将只编译与该源文件相关的目标文件,因此,编译完最终的可执行文件节省了大量的时间。
>Make 命令实例
下面是本文所使用的测试环境:
OS —— Ubunut 13.04 Shell —— Bash 4.2.45 Application —— 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.o
现在,假设你对 test.c 文件做了一些修改,重新使用 make 编译工程:
$ make gcc -c -Wall test.c gcc -Wall test.o anotherTest.o -o test
你可以看到只有 test.o 重新编译了,然而另一个 Test.o 没有重新编译。
现在清理所有的目标文件和可执行文件 test,你可以使用目标 clean:
$ make clean rm -rf *.o test$ ls anotherTest.c Makefile test.c test.h
你可以看到所有的 .o 文件和执行文件 test 都被删除了。
2. 通过 -B 选项让所有目标总是重新建立
到目前为止,你可能注意到 make 命令不会编译那些自从上次编译之后就没有更改的文件,但是,如果你想覆盖 make 这种默认的行为,你可以使用 -B 选项。
下面是个例子:
$ make make: Nothing to be done for `all’.$ make -B gcc -c -Wall test.c gcc -c -Wall anotherTest.c gcc -Wall test.o anotherTest.o -o test
你可以看到尽管 make 命令不会编译任何文件,然而 make -B 会强制编译所有的目标文件以及最终的执行文件。
3. 使用 -d 选项打印调试信息
如果你想知道 make 执行时实际做了什么,使用 -d 选项。
这是一个例子:
$ make -d | more GNU Make 3.81 Copyright (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 A PARTICULAR PURPOSE. This program built for x86_64-pc-linux-gnu Reading 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.txt file1 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。
# linux
# 命令行参数
# 并发
# 自动化
# 你可以
# 如果你
# 这是
# 你想
# 你能
# 这是一个
# 执行文件
# 你对
# 可以使用
# 目录下
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
laravel怎么用DB facade执行原生SQL查询_laravel DB facade原生SQL执行方法
Laravel怎么连接多个数据库_Laravel多数据库连接配置
javascript日期怎么处理_如何格式化输出
Windows11怎样设置电源计划_Windows11电源计划调整攻略【指南】
香港服务器选型指南:免备案配置与高效建站方案解析
Laravel Eloquent:优雅地将关联模型字段扁平化到主模型中
微信小程序 require机制详解及实例代码
Laravel如何部署到服务器_线上部署Laravel项目的完整流程与步骤
在Oracle关闭情况下如何修改spfile的参数
Android利用动画实现背景逐渐变暗
如何在宝塔面板中修改默认建站目录?
简单实现Android文件上传
香港服务器网站卡顿?如何解决网络延迟与负载问题?
北京网站制作公司哪家好一点,北京租房网站有哪些?
移动端手机网站制作软件,掌上时代,移动端网站的谷歌SEO该如何做?
javascript事件捕获机制【深入分析IE和DOM中的事件模型】
Laravel如何实现图片防盗链功能_Laravel中间件验证Referer来源请求【方案】
Laravel如何处理CORS跨域问题_Laravel项目CORS配置与解决方案
南京网站制作费用,南京远驱官方网站?
Laravel怎么解决跨域问题_Laravel配置CORS跨域访问
Laravel如何配置任务调度?(Cron Job示例)
电商网站制作多少钱一个,电子商务公司的网站制作费用计入什么科目?
如何在IIS服务器上快速部署高效网站?
HTML透明颜色代码在Angular里怎么设置_Angular透明颜色使用指南【详解】
Win11怎么查看显卡温度 Win11任务管理器查看GPU温度【技巧】
Laravel如何处理异常和错误?(Handler示例)
百度输入法ai组件怎么删除 百度输入法ai组件移除工具
如何快速配置高效服务器建站软件?
Laravel如何发送邮件和通知_Laravel邮件与通知系统发送步骤
如何为不同团队 ID 动态生成多个非值班状态按钮
网站制作大概要多少钱一个,做一个平台网站大概多少钱?
如何快速重置建站主机并恢复默认配置?
高配服务器限时抢购:企业级配置与回收服务一站式优惠方案
JS经典正则表达式笔试题汇总
iOS验证手机号的正则表达式
Laravel如何自定义分页视图?(Pagination示例)
Laravel如何实现事件和监听器?(Event & Listener实战)
高防服务器租用指南:配置选择与快速部署攻略
如何在企业微信快速生成手机电脑官网?
香港服务器网站搭建教程-电商部署、配置优化与安全稳定指南
详解jQuery停止动画——stop()方法的使用
Swift中循环语句中的转移语句 break 和 continue
如何用手机制作网站和网页,手机移动端的网站能制作成中英双语的吗?
Laravel中的Facade(门面)到底是什么原理
手机软键盘弹出时影响布局的解决方法
浏览器如何快速切换搜索引擎_在地址栏使用不同搜索引擎【搜索】
Laravel如何实现本地化和多语言支持?(i18n教程)
Java解压缩zip - 解压缩多个文件或文件夹实例
Win11怎么修改DNS服务器 Win11设置DNS加速网络【指南】
作用域操作符会触发自动加载吗_php类自动加载机制与::调用【教程】


th 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--