Makefile,替换先决条件自动变量中的路径
我有以下规则:Makefile,替换先决条件自动变量中的路径,makefile,Makefile,我有以下规则: $ ls files a b c $ cat Makefile files.7z: ./files/* 7z a $@ $? 该规则将按如下方式执行: 7z a文件.7z文件/a文件/b文件/c 7z处理以/开头的路径,特别是在这种情况下,它将在存档中包含文件,而不包含路径。替换路径的最短方法是什么,首先是/中的$??(文件名可以有空格。)Makefile根本不能很好地处理空格(请参阅)。最简单的方法是在有空格的情况下使其失败,然后很容易: check: @ ls .
$ ls files
a b c
$ cat Makefile
files.7z: ./files/*
7z a $@ $?
该规则将按如下方式执行:
7z a文件.7z文件/a文件/b文件/c
7z处理以
/
开头的路径,特别是在这种情况下,它将在存档中包含文件,而不包含路径。替换路径的最短方法是什么,首先是/
中的$?
?(文件名可以有空格。)Makefile根本不能很好地处理空格(请参阅)。最简单的方法是在有空格的情况下使其失败,然后很容易:
check:
@ ls ./files/* | grep -q " "; \
if [ $$? -ne 1 ]; then \
echo "WE DO NOT SUPPORT FILENAMES WITH SPACES"; \
exit 1; \
fi
files.7z: ./files/* | check
7z a $@ $(addprefix ./,$^)
注意:web上有一些带空格的文件名解决方案,但它们过于复杂,不易维护,而且比告诉客户/同事“我们不支持带空格的文件名”要麻烦得多