我有一個腳本,它在運行時會生成一個文件。如果生成的文件不存在或腳本更改,我想創建一個Makefile來運行腳本以生成文件。Makefile始終表示生成文件目標是最新的,但會按預期生成目標
這裏是一個簡化版本。比方說,我有一個可執行腳本gen_test.sh
這樣的:
#!/bin/sh
echo "This is a generated file" > genfile.foo
而且一個Makefile是這樣的:
#
# Test Makefile
#
GEN_SCRIPT = $(CURDIR)/gen_test.sh
GEN_FILE = $(CURDIR)/genfile.foo
$(GEN_FILE): $(GEN_SCRIPT)
$(shell $(GEN_SCRIPT))
.PHONY: clean
clean:
$(RM) $(GEN_FILE)
當我運行make
,我看到下面的輸出:
make: '/workspace/sw/bhshelto/temp/makefile_test/genfile.foo' is up to date.
但genfile.foo
確實會生成。
這是怎麼回事?爲什麼我會看到「正在更新」的信息,我該如何擺脫它?
謝謝!
爲什麼在配方中使用'shell'?只需寫'$(GEN_SCRIPT)'而不是'$(shell $(GEN_SCRIPT))'。 – user657267