Skip to content
目录

Makefile

一、基础

1. 定义变量

makefile
var = code.lmcw.art/gokits/log

deps
	go get $(var)

2. 清空目标文件等

makefile
.PHONY clean
clean:
	-rm xxx

-rm- 表示即便删除出错也忽略错误继续执行下去。

3. Makefile 文件内容

  • 显示规则:编写者明确指定的命令。
  • 隐晦规则:make 命令支持的自动推导规则。
  • 变量定义。
  • 文件指示:
    • 在 Makefile 中引用另一个 Makefile。
    • 根据某些情况指定 Makefile 中的有效部分,就像 C 语言中的预编译 #if 一样。
    • 定义一个多行的命令。
  • 注释:使用 # 注释。

4. 引用其他 Makefile

makefile
include <filename>

include foo.Makefile *.mk $(mkfile)

文件查找规则:

  1. 如果文件都没有指定绝对路径或是相对路径的话,make 会首先在当前目录下寻找。
  2. 如果 make 执行时,有 -I--include-dir 参数,那么 make 就会在这个参数所指定的目录下去寻找。
  3. 如果目录 <prefix>/include (一般是:/usr/local/bin/usr/include )存在的话,make 也会去找。

文件缺失处理:

  1. make 会生成一条警告信息,并继续载入其它的文件。

  2. 一旦完成 makefile 的读取,make 会再重试这些没有找到,或是不能读取的文件,如果还是不行,make 才会出现一条致命信息。

  3. 如果你想让 make 不理那些无法读取的文件,而继续执行,你可以在 include 前加一个减号 -。如:

    makefile
    -include <filename>
    

5. 环境变量 MAKEFILES

如果你的当前环境中定义了环境变量 MAKEFILES ,那么,make 会把这个变量中的值做一个类似于 include 的动作。这个变量中的值是其它的 Makefile,用空格分隔。只是,它和 include 不同的是,从这个环境变量中引入的 Makefile 的“目标”不会起作用,如果环境变量中定义的文件发现错误,make 也会不理。