谁会拒绝一个makefile版本的斐波那契函数呢?
2019-03-19 本文已影响0人
Mum_Chen
起因: 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
课堂笔记
- 谁会拒绝一个makefile版本的斐波那契函数呢?
- 用的是bc实现的加减法, 在执行
make fib=327
之后, 程序会出现错误. - 在编写一些魔性的makefile时,
eval
,value
,call
我认为更实用. 推荐去官方看教程.