把握一个Makefile的脉络

把握一个Makefile的脉络

首先列出其中的target:

  • grep -E '^[^: \t]+:' Makefile
  • grep -E '^[a-zA-Z0-9_.-]+:' Makefile
  • grep -E '^[^[:space:]:]+:' Makefile
  • grep -P '^[^\s:]+:' Makefile

-E和-P

  • -E --extended-regexp Interpret PATTERNS as extended regular expressions.
  • -P, --perl-regexp Interpret PATTERNS as Perl-compatible regular expressions (PCREs).

可以在.bashrc里alias grep='grep -E'

然后看看变量的值。准备个print-vars.mk,内容如下:

print-all-vars:
  $(foreach V, $(sort $(.VARIABLES)), $(info $V=$($V)))

# $(foreach <var>, <list>, <text>)

print-vars:
  $(foreach V, $(sort $(.VARIABLES)),\
  $(if $(filter-out environment% default automatic, $(origin $V)),\
  $(info $V=$($V))))

# $(if <condition>, <then-part>[, <else-part>])
# $(filter-out <patterns>, <text>)
# $(warning text) 输出时带文件名和行号

在Makefile的最后面include print-vars.mk,然后make print-vars或make print-all-vars

这个文件可以复用。