对带空格的文件名使用makefile通配符命令

对带空格的文件名使用makefile通配符命令,makefile,Makefile,我有一个用于压缩图片的生成文件: src=$(wildcard Photos/*.jpg) $(wildcard Photos/*.JPG) out=$(subst Photos,Compressed,$(src)) all : $(out) clean: @rmdir -r Compressed Compressed: @mkdir Compressed Compressed/%.jpg: Photos/%.jpg Compressed @echo "Compr

我有一个用于压缩图片的生成文件:

src=$(wildcard Photos/*.jpg) $(wildcard Photos/*.JPG)
out=$(subst Photos,Compressed,$(src))

all : $(out)

clean:
    @rmdir -r Compressed

Compressed:
    @mkdir Compressed

Compressed/%.jpg: Photos/%.jpg Compressed
    @echo "Compressing $<"
    @convert "$<" -scale 20% "$@"

Compressed/%.JPG: Photos/%.JPG Compressed
    @echo "Compressing $<"
    @convert "$<" -scale 20% "$@"
我认为这是
通配符
命令中的一个问题,但我不确定要更改什么才能使其正常工作


如何修改makefile以允许在文件名中使用空格?

一般来说,在make中使用空格是个坏主意,但对于您的情况,这可能会起作用:

src=$(shell find Photos/ -iname '*.JPG' | sed 's/ /\\ /g')

out=$(subst Photos,Compressed,$(src))

all : $(out)

Compressed:
  @mkdir Compressed

Compressed/%: Photos/% Compressed
  @echo "Compressing $<"
  @convert "$<" -scale 20% "$@"
src=$(shell find Photos/-iname'*.JPG'| sed's/\\\/g')
out=$(subst照片,压缩,$(src))
全部:$(外)
压缩的:
@mkdir压缩
压缩/%:照片/%压缩

@echo“压缩$感谢您的帮助,这可以修复通配符问题中的空格。我将其修改为
src=$(shell ls Photos | sed's//\\/g;s/*/Photos\/\0/)
允许
JPG
JPG
。但是,现在我得到了错误
make:**没有规则将target“Compressed/Piper PA-28-236 Dakota.JPG”设置为“all”所需。停止。
所以现在我需要弄清楚如何让目标使用空格来工作。感谢您的帮助,我让它工作了。替换为
修复这是目标问题,但在生成的文件中添加了一个
。我最终使用了一个调用函数:
replace=echo$(1)| sed's/?//g'
,然后将其与以下命令一起使用:
@convert“$我应该接受您的答案还是创建自己的答案,详细说明我为使其工作所做的一切,并显示最终的生成文件?嗯,当我将新图像添加到
Photos
目录或从
compressed
目录中删除一个压缩图像时,Makefile会压缩所有图像,而不仅仅是新图像或没有压缩版本的图像。感谢更新的答案,这会简单得多。然而,我在上一篇评论中描述的问题仍然存在。
src=$(shell find Photos/ -iname '*.JPG' | sed 's/ /\\ /g')

out=$(subst Photos,Compressed,$(src))

all : $(out)

Compressed:
  @mkdir Compressed

Compressed/%: Photos/% Compressed
  @echo "Compressing $<"
  @convert "$<" -scale 20% "$@"