使用Makefile时,我无法使用md5sum包含的文件生成包。
我确实找到了解决方法,但我对此并不满意。
这是我的makefile如何工作的示例,它可用于通过file1
重现我的问题,以及我使用file2
的解决方法。
VERSION:=1
DIR:=tmp
file: #rule to build the file with current version tag
touch $(DIR)/file-$(VERSION)
$(DIR)/file1.tar:file #rule that fails to create the md5 file
cd $(DIR)
md5sum -b \
file-$(VERSION) \
>> file-$(VERSION).md5
tar -cf $@ \
file-$(VERSION) \
file-$(VERSION).md5
cd -
$(DIR)/file2.tar:file #workaround that fails to create the md5 file
md5sum -b \
$(DIR)/file-$(VERSION) \
>> $(DIR)/file-$(VERSION).md5
tar -cf $@ -C $(DIR) \
file-$(VERSION) \
file-$(VERSION).md5
file1: $(DIR) $(DIR)/file1.tar
file2: $(DIR) $(DIR)/file2.tar
$(DIR):
mkdir -p $(DIR)
运行file1
,构建失败,我得到以下输出:
:~/tmp$ make file1
mkdir -p tmp
touch tmp/file-1
cd tmp
md5sum -b \
file-1 \
>> file-1.md5
md5sum: file-1: No such file or directory
Makefile:8: recipe for target 'tmp/file1.tar' failed
make: *** [tmp/file1.tar] Error 1
运行file2
,文件成功构建:
:~/tmp$ make file2
touch tmp/file-1
md5sum -b \
tmp/file-1 \
>> tmp/file-1.md5
tar -cf tmp/file2.tar -C tmp \
file-1 \
file-1.md5
我的问题是,为什么md5sum
工具在用作cd dir
指令时,在调用Makefile
之后无法在同一目录中找到该文件?或者,我错过了什么?
答案 0 :(得分:2)
配方中的每一行都由单独的shell调用执行。所以你的rows = sum(dat==10)+(dat(end)~=10);
reshape(result,[],rows)'
行是由shell执行的,并且对另一个shell执行的下一行(cd $(DIR)
)没有影响。在您的情况下,一个简单的解决方案包括链接所有命令,使得它们被make视为一行,并由同一个shell执行:
md5sum...
或:
target: prerequisites
cd here; \
do that; \
...