怎么在Linux中使用Make 命令

2022年 10月 16日 发表评论
腾讯云正在大促:点击直达 阿里云超级红包:点击领取
免费/便宜/高性价比服务器汇总入口(已更新):点击这里了解

今天本站和你分享了如何在Linux中使用Make命令。本站认为它非常实用,所以他分享给你学习。希望你看完这篇文章能有所收获。话不多说,让我们和本站一起看看

Linux下的Make命令是系统管理员和程序员最常用的命令之一。管理员用它通过命令行编译安装很多开源工具,程序员用它管理自己庞大复杂的项目编译问题。Make 如何工作的

对于那些不知道其背后机制的人来说,make命令接收目标作为命令行参数。这些目标通常存储在以“Makefile”命名的特殊文件中,文件中还包含与目标对应的操作。有关更多信息,请阅读一系列关于Makefiles如何工作的文章。

第一次执行make命令时,它会扫描Makefile以找到目标及其依赖项。如果这些依赖项本身就是目标,继续扫描Makefile中的这些依赖项以建立它们的依赖项,然后编译它们。一旦编译了主依赖项,就编译了主目标(这是通过make命令传入的)。Make 命令实例

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

OSmdashmdashUbunut13.04

ShellmdashmdashBash4.2.45

ApplicationmdashmdashGNUMake3.81以下是项目的内容:

$ls

以下是Makefile:other test . cmakefiletest . ctest . h的内容:

all:test

test:test.oanotherTest.o

gcc-wall test . oanothertest . o-otest

test.o:test.c

gcc-c-Wallett . c

另一个测试

gcc-c-wallotherTest . c

clean:

Rm-rf*。现在让我们来看一些在Linux下制作命令应用程序的例子:1. 一个简单的例子

要编译整个项目,您可以简单地在make命令后使用make或带目标。

$make

gcc-c-Wallett . c

gcc-c-wallotherTest . c

Gcc-walltest。oanothertest。o-o测试。您可以第一次看到make命令创建的依赖关系和实际目标。

再看目录的内容,更多。o文件和其中的可执行文件:

$ls

现在,假设您已经对test.c文件进行了一些修改,并重新使用make来编译项

$make

gcc-c-Wallett . c

gcc-WalTest . oanothertest.o-o测试您可以看到只有test.o被重新编译,但是另一个test . o没有被重新编译。

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

$makeclean

rm-rf*。otest

$ls

另一个测试。cmake filetest。你可以看到所有的。o文件和执行文件测试已被删除。2. 通过 -B 选项让所有目标总是重新建立

到目前为止,您可能注意到make命令不会编译自上次编译以来没有更改的文件,但是如果您想要覆盖make的默认行为,您可以使用-B选项。

以下是一个例子:

$make

make : nothingtobdone for ` all squo;

$make-B

gcc-c-Wallett . c

gcc-c-wallotherTest . c

Gcc-walltest。oanothertest。o-o测试你可以看到,虽然make命令不会编译任何文件,但是make -B会强制编译所有目标文件和最终执行文件。3. 使用 -d 选项打印调试信息

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

这是一个例子:

bash;">$make-d|more GNUMake3.81 Copyright(C)2006FreeSoftwareFoundation,Inc. Thisisfreesoftware;seethesourceforcopyingconditions. ThereisNOwarranty;notevenforMERCHANTABILITYorFITNESSFORA PARTICULARPURPOSE. Thisprogrambuiltforx86_64-pc-linux-gnu Readingmakefiles… Readingmakefile`Makefile’… Updatingmakefiles…. Consideringtargetfile`Makefile’. Lookingforanimplicitrulefor`Makefile’. Tryingpatternrulewithstem`Makefile’. Tryingimplicitprerequisite`Makefile.o’. Tryingpatternrulewithstem`Makefile’. Tryingimplicitprerequisite`Makefile.c’. Tryingpatternrulewithstem`Makefile’. Tryingimplicitprerequisite`Makefile.cc’. Tryingpatternrulewithstem`Makefile’. Tryingimplicitprerequisite`Makefile.C’. Tryingpatternrulewithstem`Makefile’. Tryingimplicitprerequisite`Makefile.cpp’. Tryingpatternrulewithstem`Makefile’. --More--

这是很长的输出,你也看到我使用了 more 命令来一页一页显示输出。 4. 使用 -C 选项改变目录 你可以为 make 命令提供不同的目录路径,在寻找 Makefile 之前会切换目录的。 这是一个目录,假设你就在当前目录下:

$ls  filefile2frndfrnd1.cpplog1.txtlog3.txtlog5.txt  file1filenamewithspacesfrnd1frnd.cpplog2.txtlog4.txt

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

$make-C../make-dir/  make:Enteringdirectory`/home/himanshu/practice/make-dir’  make:Nothingtobedonefor`all’.  make:Leavingdirectory`/home/himanshu/practice/make-dir

你能看到 make 命令首先切到特定的目录下,在那执行,然后再切换回来。 5. 通过 -f 选项将其它文件看作 Makefile 如果你想将重命名 Makefile 文件,比如取名为 my_makefile 或者其它的名字,我们想让 make 将它也当成 Makefile,可以使用 -f 选项。

make-fmy_makefile

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

以上就是怎么在Linux中使用Make 命令,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注亿速云行业资讯频道。

腾讯云正在大促:点击 https://2bcd.com/go/tx/进入最新活动页】领取无门槛代金券,附云服务器价格表,2核2G4M轻量应用服务器99元1年,新老用户都可以买,可以享受1次续费99元一年、135元15个月、三年560元,MySQL云数据库59元1年起,2核2G3M配置82元1年,2核4G5M配置188元一年、3年900元,4核8G12M轻量服务器880元15个月,8核16G配置1890元15个月,更多16核32G28M带宽和云服务器CVM标准型S5、GPU服务器、CVM标准型SA2租用优惠价格如下,可以 点此进入最新活动页 查看当前最新的优惠券和活动信息。还可以领下10元无门槛代金券:点此直达 阿里云限量超级红包:点击领取】5亿上云补贴和2088元满减代金券,阿里云服务器租用费用最新价格表【点击了解】,最便宜轻量应用服务器2核2G3M带宽82元1年,ECS云服务器2核2G3M带宽99元一年,ECS u1实例2核4G5M带宽优惠价格199元一年,香港30M带宽轻量服务器24元1个月、288元一年,4核8G服务器706元一年,ECS云服务器4核16G10M带宽30元1个月、90元3个月,云服务器8核32G10M带宽109元1个月、327元3个月。阿里云产品最高降价55%,点击 https://2bcd.com/go/aliyun/ 进入最新活动页了解。 腾讯云续费贵,一次性买3年/5年,免得续费贵。3年轻量 2核2G 4M 560元;3年轻量 2核4G 5M 3年900元,活动入口:点击前往(下拉到“爆品专区”即可看到)。 老用户享新人优惠的方法:用Qq登录、1人可注册3个新账号/用家人朋友的身份注册新号(点击注册新账号)。
小咸鱼

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: