새로 생성된 파일을 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.txtmake가 실행되기 전의 데이터(새 리디렉션 데이터 아님)로 변수가 설정되고, 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를 사용하고 있으므로 >>실행할 때마다 커지지 않습니다.

관련 정보