编写一个较为复杂的Makefile

Makefile   2023-08-13 16:29   35   0  

一个较为复杂的Makefile

· 首先,先下载以下附件中的源码。

zip.svgsoduku.zip

· 然后把源码中src文件夹中的所有文件复制到一个新的文件夹中:

· 接下来,根据下图书写一个Makefile,手动编译是从左到右,而Makefile就从右到左进行书写:

31002_eeoq_2348.png

· 首先,目标只有一个,就是编译出最终可执行文件,因此先写上最终目标:

· 然后,一个一个地解决它所需要的依赖,首先是第一个,block.o:

查看block.o的源码,它还需要引入一些别的库。

因此block.o应该这么书写:

· 接下来是command.o,介绍一个命令,可以快速知道该文件编译需要的所有依赖

g++ -MM <fileName>

此处查看command.cpp可以得到:

直接复制到Makefile里去即可:

· 剩下的都一样操作了,得到的Makefile如下:

· 最后,一个Makefile最后都会有一个叫做clean的指令,用于清除生成的内容:

· 最终得到的完整Makefile如下:

· 然后,我们使用make命令来跑一下

32226_ewd7_3180.png

是可以运行成功的。

· 其实在书写Makefile的时候,那么多依赖其实是可以不写的,但是写上的好处是,当再次执行make的时候,未改动的依赖就不会重复编译,节省时间。

· 可以看到编译过程中,clean没有被执行,那是因为clean和总目标sudoku没有关系,因此不会被执行,如果要执行,需要手动指定目标,如:

make clean

· 在Makefile中,默认的总目标就是开头的第一个目标,看下面的例子:

直接执行make得到的结果为:

如果我要执行target2,就需要手动指定:

· 如果要更改默认的总目标,需要在Makefile里面使用变量来指定,变量使用方法如下。

.DEFAULT_GOAL = <target>

· 以下例子展示把上面的target2设置为总目标:

直接执行make的时候就会执行第二个目标了:



博客评论
还没有人评论,赶紧抢个沙发~
发表评论
说明:请文明发言,共建和谐网络,您的个人信息不会被公开显示。