将新创建的文件设置为 makefile 中的变量

将新创建的文件设置为 makefile 中的变量

我正在尝试创建一个文件并将文件的内容设置为变量,但该变量始终被视为空。

一个例子:

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 不会在每次运行时增长。

相关内容