Makefile在子目录中有多个目标

时间:2018-10-27 22:07:42

标签: makefile

嗨!

几天前,我开始弄乱makefile,所以我给自己做了一个练习,使我学习起来并使生活更轻松。 我基本上想读取makefile所在的目录(根目录),并在将其部署到服务器之前使用luamin尽可能多地压缩文件。但是我想让它尽可能灵活,因此应根据所述文件在目录中的位置将其镜像到服务器。

因此,如果它在名为home的子文件夹中找到文件,则应创建一个具有相同名称的新文件夹,其中包含压缩文件。我已经压缩了根文件夹中的文件,并且创建了文件应驻留的目录。

objs = $(wildcard *.lua)
dirs = $(wildcard */)

compress: $(objs)
    mkdir -p .build
    luamin -f $(objs) > .build/$(objs)
    mkdir .build/$(dirs)

clean:
    rm -rf ./.build

deploy: .build
    cp ./.build/* ~

1 个答案:

答案 0 :(得分:0)

如果您使用 GNU make ,则有些功能确实可以帮助您完成所需的工作。警告:仅当您的文件名不包含空格

时,此方法才有效
shell

说明:

  1. find make函数用于运行.build命令,该命令在*.lua文件之外的所有子目录中搜索srcfiles文件。结果被分配给addprefix make变量。
  2. .build/ make函数用于将srcfiles前缀添加到dstfiles make变量的所有单词并将结果分配给compress make变量。
  3. li>
  4. make目标是Makefile中的第一个(实际)目标。因此,这是仅调用make compress时运行的默认目标。它与调用compress相同。 clean目标被声明为虚假。这表明与deploycompress一样,它不是真实文件。 $(dstfiles): .build/%: %...目标取决于所有目标文件。如果缺少或早于其对应的源文件,则必须对其进行重建。
  5. make static pattern rule .build/./foo/bar/baz.lua声明了一条通用规则,其中每个目标文件(./foo/bar/baz.lua)都取决于相应的源文件(./foo/bar/)。配方创建目标目录(dir),该目录通过luamin make函数进行计算。然后,它应用$@命令。该食谱使用了$<[('mar', 95), ('Kim', 98) ...] automatic variables