对带空格的文件名使用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% "$@"