【makefile】makefile中产生能稳定使用的随机数

事情是这样的,我需要在makefile中每次执行时候产生一个随机数,之后这个随机数我要在一条run指令中使用三次:传入VCS,用来产生log文件名和将log文件传给perl脚本,大概就是下面这种代码:

exoprt SEED := 一个随机数
run:
    @vcs -ntb_random $(SEED) > $(SEED).log
    @perl_script $(SEED).log

我希望每次run的时候产生不同的随机数,但是在一次run的过程中,这个SEED的值需要是固定的。

那么其实就可简化成下面这个场景,执行make test1时候应该打印三个一样的数:

SEED := 一个随机数
test1: test
	@echo $(SEED)

test:
	@echo $(SEED)
	@echo $(SEED)

为此我昨晚想到了凌晨1点多,因为我最开始使用的方法一直不行:

SEED := $$RANDOM
test1: test
	@echo $(SEED)

test:
	@echo $(SEED)
	@echo $(SEED)

打印结果:

[xiaotu@xiaotu-eda ~/my_work/vcs_demo]$make test1
13672
10520
27727

虽然产生了随机数,但是在一次使用中这个随机数会改变,因为每个$(SEED)都会被解析为$$RANDOM,每次都产生了新的随机数,并没能达到我要的效果!

于是查询了各种资料,最后选择了两种方式:借助perl,或者借助python;

如果采用perl语言产生随机数,例如产生8位数随机数可以这么写:

SEED := $(shell perl -e "print int(rand(100000000))")
test1: test
	@echo $(SEED)

test:
	@echo $(SEED)
	@echo $(SEED)

执行3次的结果:

[xiaotu@xiaotu-eda ~/my_work/vcs_demo]$make test1
81892076
81892076
81892076
[xiaotu@xiaotu-eda ~/my_work/vcs_demo]$make test1
5536259
5536259
5536259
[xiaotu@xiaotu-eda ~/my_work/vcs_demo]$make test1
29298633
29298633
29298633

如果采用python语言产生随机数,可以这么写:

SEED := $(shell python -c "from random import randint; print randint(0,99999999)")
test1: test
	@echo $(SEED)

test:
	@echo $(SEED)
	@echo $(SEED)

执行3次结果:

[xiaotu@xiaotu-eda ~/my_work/vcs_demo]$make test1
29968744
29968744
29968744
[xiaotu@xiaotu-eda ~/my_work/vcs_demo]$make test1
26819109
26819109
26819109
[xiaotu@xiaotu-eda ~/my_work/vcs_demo]$make test1
62379778
62379778
62379778

满足需求!!!

你可能感兴趣的:(脚本语言)