![将新创建的文件设置为 makefile 中的变量](https://linux22.com/image/102883/%E5%B0%86%E6%96%B0%E5%88%9B%E5%BB%BA%E7%9A%84%E6%96%87%E4%BB%B6%E8%AE%BE%E7%BD%AE%E4%B8%BA%20makefile%20%E4%B8%AD%E7%9A%84%E5%8F%98%E9%87%8F.png)
我正在尝试创建一个文件并将文件的内容设置为变量,但该变量始终被视为空。
一个例子:
define FILE_VAR
cat /output/1.txt >> /output/2.txt
$(eval s := $(shell cat /output/2.txt))
$(eval FILENAME_BIN=$(word 1, $(s)).$(word 2, $(s)).$(word 3, $(s)).bin)
$(eval FILENAME_JFFS2=$(word 1, $(s)).$(word 2, $(s)).$(word 3, $(s)).jffs2)
endef
通过此作为后生成钩子调用:
# Alter the post-gen hooks, depending on what options are selected
ifneq ($(BR2_TARGET_ROOTFS_EXT2_FILE_VAR),)
ROOTFS_EXT2_POST_GEN_HOOKS += FILE_VAR
endif
如果2.txt
在运行之前存在,则变量将被设置为运行 make 之前的数据(不是新的重定向数据),如果2.txt
不存在,则不会设置变量。看起来它正在评估第一次运行 make 时文件的样子,这不是我想要的。
答案1
您没有指定如何FILE_VAR
使用,但如果我尝试$(eval $(FILE_VAR))
,那么问题是它cat
不会在规则之外执行您想要的操作。将其包裹起来$(shell )
可能效果更好:
define FILE_VAR
$(shell cat /output/1.txt > /output/2.txt)
$(eval s := $(shell cat /output/2.txt))
$(eval FILENAME_BIN=$(word 1, $(s)).$(word 2, $(s)).$(word 3, $(s)).bin)
$(eval FILENAME_JFFS2=$(word 1, $(s)).$(word 2, $(s)).$(word 3, $(s)).jffs2)
endef
$(eval $(FILE_VAR))
all:
echo $(FILENAME_BIN)
我使用>
而不是>>
这样 2.txt 不会在每次运行时增长。