谁会拒绝一个makefile版本的斐波那契函数呢?

起因: fibonacci的呼唤

这几天由于工作原因, 需要写一些较为复(mo)杂(xing)的Makefile脚本, 所以我花了一段时间好好的学习了一下make的教程.
当阅读到高级功能的时候我的san值在狂降.在习得了make的递归手法之后, 我仿佛听到了fibonacci在呼唤我!!!

撸起袖子干活

Makefile

# Makefile
fib ?= 1

ifeq ($(origin _A), undefined)
  _A = 0
  _B = 1
  _C = 1
else
  private _C := $(shell echo $(_A) + $(_B) | bc)
  _A := $(_B)
  _B := $(_C)
endif
export _A  _B fib

_fib:
ifeq ($(fib), $(MAKELEVEL))
    @$(MAKE) -C . _done --no-print-directory
else
    @echo lv=$(MAKELEVEL), A=$(_A) B=$(_B)
    @$(MAKE) -C . _fib --no-print-directory
endif

_done:
    @echo result=$(_A)

运行这段程序

make fib=4

# result
lv=0, A=0 B=1
lv=1, A=1 B=1
lv=2, A=1 B=2
lv=3, A=2 B=3
result=5

课堂笔记

  1. 谁会拒绝一个makefile版本的斐波那契函数呢?
  2. 用的是bc实现的加减法, 在执行make fib=327之后, 程序会出现错误.
  3. 在编写一些魔性的makefile时, eval, value, call我认为更实用. 推荐去官方看教程.

参考资料

  • [1] make 官方教程.
  • [2] github

你可能感兴趣的:(谁会拒绝一个makefile版本的斐波那契函数呢?)