make和makefile知识查漏补缺

来源:互联网 发布:淘宝怎么搜烟 编辑:程序博客网 时间:2024/04/19 23:04

1.make命令会试图创建列在makefile文件中的第一个目标,但如果想一次创建多个文件时,你可以利用伪目标all,比如最后的程序由二进制文件myapp和使用手册myapp.1,这样就可以语句all:myapp myapp.1。这时就可以一次创建myapp和myapp.1两个文件,所以再次强调,如果未指定一个all目标,则make命令将只创建它在文件makefile中找到的第一个目标。

2.在makefile中可以使用宏以一种更通用的格式来书写makefile。可以通过语句MACRONAME=value在文件定义宏,如果想要把一个宏的值设置为空,可以令“=”后面的内容为空。引用宏的方法是使用$(MACRONAME)${MACRONAME}.宏通常都是在makefile中定义的,但也可以在调用make命令时按照上面的宏定义方法来定义宏,特别说明的是命令行上的宏定义将覆盖在makefile中的定义,比如我们常用到make安装软件时指定的路径信息。当在makefile文件以外使用宏定义时,要注意宏定义必须以单个参数的形式传递,所以应避免在宏定义中使用空格或者应加上引号:make “CC = c89”,这里宏定义用了空格,所以要加引号。

3.make命令内置的一些特殊的宏定义,当然要先保证你的make系统支持这些宏并意义正确,如下:

  macro

  在makefile中,有时会看到在一些命令前边常用到两个特殊的字符(-和@),如下:

  hg

4.内置规则:在make命令中内置了大量的内置规则,利用这些内置规则,只需给出依赖关系,而无需给出规则,make命令也知道如何编译。可以通过-p让make打出所有的内置规则。这里给出一部分:

  内置规则

 有了这条内置规则,就可以知道:如果要把.c 文件编译成.o只需要把你需要添加的编译参数放在COMPILE.c和OUT_OPTION中就可以了,在COMPILE.c中又有很多的选项可以设置。利用这种方式,可以是makefile看的更加简单。由于这个内置规则中的选项用到了宏定义,所以决定了我们可以在make中来更改。

5.后錣和模式规则:在内置规则中,利用到了后缀名,所以当给出某个特定后缀名的文件时,make命令知道应用哪个规则来创建带有另一个不同后缀的文件。make在这方面的特殊用法为:
   .<old_suffix>.<new_suffix>: 
          compile rules

  这样就定义了一条通用规则,利用该规则可以从带有旧后缀名的文件创建带有新后缀名的文件,并保留源文件的前半部分,使用的就是上面的编译规则;compile rules.在最新的make版本中还包含一个新的语法:模式规则可以使用%通配符语法来匹配文件名,而不是仅依赖于文件的后缀名,如
   %.cpp:%.o

----------未完待续-------- 


原创粉丝点击