从make

时间:2016-09-26 16:28:05

标签: makefile gnu-make

我有一个像这样的目录结构:

+ root
  + src
    + file1.conf
    + file2.conf
    + ...
    + filen.conf
    + images
      + image1.png
      + image2.png
      + ...
      + imagem.png

我想使用make来处理它:

  1. .conf个文件已从src/复制到dist/
  2. 图片由optipng进行处理,最终会以dist/images结束。
  3. 还有一些其他的事情要做,但它类似于我现在遇到的麻烦。

    我试着这样做:

    # SOURCES
    CONF=$(wildcard src/*.conf)
    IMAGES=$(wildcard src/images/*.png)
    
    # TARGETS
    CONF_T=$(CONF:src/%=dist/%)
    IMAGES_T=$(IMAGES:src/%=dist/%)
    
    all: $(CONF_T) $(IMAGES_T)
    
    $(CONF_T): $(CONF)
    # This always echoes the first .conf file,
    # which I guess is correct, but not what I want.
        @echo $<
    # So this won't work:
        cp $< $@
    
    $(IMAGES_T): $(IMAGES)
    # Same as above
        optipng $< -out $@
    

    如何将当前输入文件提供给提供变量中包含的文件列表的目标?

    我不想硬编码文件名,因为我不知道最终会有多少文件名。

1 个答案:

答案 0 :(得分:1)

使用模式规则:

dist/%.conf: src/%.conf
        @echo Conf: building $@ from $<

dist/images/%.png: src/images/%.png
        @echo Image: building $@ from $<