make工具与makefile(一)

-----仅作为学习笔记

1.什么是make工具?

        编译辅助工具。解决使用命令编译工程非常繁琐的问题。

2.怎么调用make工具?

        直接在控制台输入make命令,就会调用make工具。

3.什么是makefile?

        makefile就是描述了整个工程编译连接等规则的文件。makefile的命令必须是makefile或者Makefile。

4.Makefile基本语法

语法格式:

        目标:依赖

                (tab)命令

举例:

                 

目标:all

依赖:空

命令:gcc hello.c -o hello

上面的例子也可以写成:

                    

目标:all和hello.o

依赖:hello.o和hello.c

命令:gcc hello.c -o hello 和 gcc -c hello.c

        因为all依赖hello.o文件,所以要先执行gcc -c hello.c得到hello.o文件,然后才可以执行gcc hello.c -o hello。所以输入make命令后执行顺序如下。

        在编译的时候,我们可以使用make目标来编译,如果我们不指定目标的话,默认执行的是第一个目标所对应的规则。也就是说make和make all是一样的。如上面的例子。

接下来,我们使用make目标的方法来编译。我们修改Makefile代码如下:

        然后我们输入命令make clean就可以直接执行 rm -rf *.o hello命令。如下图所示:

但是,我们在当前目录下不能有和Makefile目标名一样的文件。比如我在当前目录下创建一个名为clean的文件,然后在执行make clean命令就会报错。如下图所示:

        为了解决这个问题,makefile引入了一个新的概念,叫做伪目标,我们使用伪目标来声明clean就可以避免与当前目录下的同名文件发生冲突。

        伪目标格式:

        .PHONY:目标

        所以,我们可以把上面的代码修改成如下图所示:

        然后我们再执行make clean命令。尽管当前目录下有clean同名文件,make clean命令也可以执行成功。如下图所示:

5.Makefile变量和变量赋值

        变量可以在许多地方使用,比如目标,依赖,或者命令。

        变量的赋值可以使用:=     ?=    :=     +=

        变量的使用:通过$()来完成变量的引用。

示例1:

        使用:=来赋值

        

        使用:=来给变量赋值,是立刻赋值,在执行var:=aaa的同时,变量值已经被确定了,所以最后打印为aaabbb,而不是cccbbb

示例2:

        使用=来赋值

        

        使用=来给变量赋值,是延时赋值,使用它来赋值是makefile里面最后被指定的值。因为我们最后变量var1赋值为ccc,所以最后打印为cccbbb,而不是aaabbb,如下图所示:

示例3:

        使用?=来赋值

        使用?=来赋值的意思为,如果var1变量前面没有被赋值,那么就给他赋值为ccc,如果前面已经赋值了,就使用前面的值,所以打印为aaabbb,而不是cccbbb,如下图所示。

        然后我们注释掉第一行代码,makefile中的注释为#

        再运行就会打印cccbbb,因为前面没有给var1变量赋值。如下图所示:  

示例4:使用+=来赋值

        使用+=来赋值是追加赋值,是在我们前面定义好的字符串里面再添加进去新的字符串,所以运行会打印aaa bbbccc。不过中间会有空格,如下图所示:  

        使用+=也类似与我们这样赋值,如下图所示:

        如果赋值很长,我们也可以使用换行符/,如下图所示:

  • 23
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值