我正在尝试在makefile中的条件中执行命令。
我让它在shell中工作:
if [ -z "$(ls -A mydir)" ]; then \
echo "empty dir"; \
else \
echo "non-empty dir"; \
fi
但是如果我在makefile中尝试它,"$(ls -A mydir)"
如果asdf
为空则不会扩展为空:
all:
if [ -z "$(ls -A mydir)" ]; then \
echo "empty dir"; \
else \
echo "non-empty dir"; \
fi
ls
命令没有像我预期的那样扩展:
$ mkdir mydir
$ make
if [ -z "" ]; then \
echo "empty dir"; \
else \
echo "non-empty dir"; \
fi
empty dir
$ touch mydir/myfile
$ make
if [ -z "" ]; then \
echo "empty dir"; \
else \
echo "non-empty dir"; \
fi
empty dir
$ ls -A mydir
myfile
如何使命令在条件内工作?
答案 0 :(得分:5)
我在编写makefile时没什么经验。但是我想你必须在食谱中使用两个美元符号:
all:
if [ -z "$$(ls -A mydir)" ]; then \
https://www.gnu.org/software/make/manual/make.html#Variables-in-Recipes:
如果您希望在食谱中出现美元符号,则必须加倍 它('$$')。
这是我更改makefile并添加$$(ls -A mydir)
后输出的示例:
$ ls mydir/
1
$ make
if [ -z "$(ls -A mydir)" ]; then \
echo "empty dir"; \
else \
echo "non-empty dir"; \
fi
non-empty dir
$ rm mydir/1
$ make
if [ -z "$(ls -A mydir)" ]; then \
echo "empty dir"; \
else \
echo "non-empty dir"; \
fi
empty dir