Defina o arquivo recém-criado como variável no makefile [closed]

0

Eu estou tentando criar um arquivo e definir o conteúdo de um arquivo para uma variável, mas a variável é sempre vista como vazia.

Um exemplo:

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

Chamado por isso como um gancho pós-gen:

# 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

Se 2.txt existir antes de executar isso, as variáveis serão definidas para os dados antes de executar o make (não os novos dados redirecionados), se 2.txt não existir, as variáveis não serão definidas. Parece que está avaliando como o arquivo é quando o make é executado pela primeira vez, o que não é o que eu quero.

    
por Paul 12.01.2017 / 10:18

1 resposta

1

Você não especifica como FILE_VAR é usado, mas se eu tentar $(eval $(FILE_VAR)) , o problema é que cat não faz o que você quer fora de uma regra. Envolvê-lo em $(shell ) pode funcionar melhor:

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)

Eu usei > em vez de >> , então 2.txt não aumenta a cada execução.

    
por 12.01.2017 / 14:19