Makefile生成随机数后无法在变量与sed命令中使用的问题求助
解决Makefile中随机值无法传递给变量和sed命令的问题
问题根源
你的代码存在两个核心问题:
RANDINT=$(shell ...)是在shell进程内赋值的变量,并非Make层面的变量。Make会优先解析recipe里所有$(变量),此时这个shell变量还未生成,因此展开为空。- recipe的每一行默认是独立的shell进程,哪怕是shell变量也无法跨行复用。
修正后的Makefile代码
ALL_CPU_IRQ = 1 all: ifeq ($(ALL_CPU_IRQ),1) $(eval RANDINT=$(shell python -c 'from random import randint; print(randint(1,3));')) @echo RANDINT=$(RANDINT) $(eval BLOCK_RUN_OPT += +init_cpu=$(RANDINT)) sed -i 's|asm_comp_opt_tl=|\0INIT_CPU=$(RANDINT),|' $(CURDIR)/asm_opt.txt @echo $(BLOCK_RUN_OPT) endif
关键修改说明
- 用
$(eval)命令在Make执行阶段动态定义Make变量RANDINT,确保后续所有$(RANDINT)的展开都能获取到正确的随机值。 $(shell ...)是Make的内置函数,用于执行shell命令并返回输出结果,结合eval就能将结果存入Make变量。- 后续修改
BLOCK_RUN_OPT和执行sed命令时,可直接使用$(RANDINT),此时它已是有效的Make变量。
验证效果
执行make后会得到预期输出:
RANDINT=2 +init_cpu=2
同时asm_opt.txt内容会被正确修改为asm_comp_opt_tl=INIT_CPU=2,
内容的提问来源于stack exchange,提问作者g8grundeller
相关产品推荐
相关产品推荐

