파일을 생성하고 파일의 내용을 변수에 설정하려고 하는데 변수가 항상 비어 있는 것으로 처리됩니다.
한 가지 예:
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를 사용하고 있으므로 >>
실행할 때마다 커지지 않습니다.