Eu executo um build de buildroot e durante esse processo de criação um arquivo de texto é criado. Depois disso, outro make, como parte da construção, é executado. Eu quero ler o conteúdo do arquivo gerado em uma variável e usá-los. Isso não funciona como no começo do meu buildroot, ele vê o arquivo como não existente, então mesmo que ele seja gerado antes do código ser executado, o make já decidiu que ele não existe.
Formato do arquivo lido:
str1 str2 1.1.0_nightlybuild (1389:1497M@trunk)
Estou tentando usar o eval (isso deve verificar o conteúdo do arquivo no momento da execução). No entanto, o problema persistir, parece que não consigo ler o arquivo depois que ele é criado. Parece que o make pode estar expandindo a variável e então o eval não funciona.
Nenhuma das variáveis está sendo definida a partir do conteúdo do arquivo. Eu verifiquei e o arquivo foi gerado corretamente, então se eu executar o make novamente, quando o arquivo já tiver sido gerado, tudo funcionará bem. A eval não é a maneira correta de fazer isso?
Portanto, o arquivo não existe no começo do make, existe e então esse código é executado:
define EXAMPLE
$(eval s := $(shell cat output/target/version.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)
mv $(BINARIES_DIR)/$(BOOTIMAGE) $(BINARIES_DIR)/$(FILENAME_BIN)
mv $(BINARIES_DIR)/$(JFFS2IMAGE) $(BINARIES_DIR)/$(FILENAME_JFFS2)
endef
Ele não funciona, o arquivo é gerado e as construções subseqüentes funcionarão, mas não a primeira em que o arquivo não existe no início do processo. A primeira vez que os arquivos são chamados simplesmente de ...bin
e ...jffs2
, pois as variáveis lidas do arquivo não são preenchidas. Quando funciona, os arquivos são chamados str1.str2.1.1.0_nightlybuild.bin
str1.str2. 1.1.0_nightlybuild.jffs2
Aqui está o makefile real de caso de uso link TEST_DEFAULT_RENAME é onde eu estou tentando ler em um arquivo, estou usando o buildroot (portanto, um muitos arquivos make), quando eu clico em make durante o processo buildroot version.txt é criado ao longo do caminho, este código então tenta ler este arquivo mas ele não funciona a menos que version.text esteja lá antes de eu inserir o make no buildroot diretório. Como você pode ver, eu uso version.txt em outro lugar via cat mas isso funciona bem.