新しく作成されたファイルを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を使用しているので、>>実行するたびに大きくなりません。

おすすめ記事