嗨!
几天前,我开始弄乱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/* ~
答案 0 :(得分:0)
如果您使用 GNU make ,则有些功能确实可以帮助您完成所需的工作。警告:仅当您的文件名不包含空格:
时,此方法才有效shell
说明:
find
make函数用于运行.build
命令,该命令在*.lua
文件之外的所有子目录中搜索srcfiles
文件。结果被分配给addprefix
make变量。.build/
make函数用于将srcfiles
前缀添加到dstfiles
make变量的所有单词并将结果分配给compress
make变量。make
目标是Makefile中的第一个(实际)目标。因此,这是仅调用make compress
时运行的默认目标。它与调用compress
相同。 clean
目标被声明为虚假。这表明与deploy
和compress
一样,它不是真实文件。 $(dstfiles): .build/%: %...
目标取决于所有目标文件。如果缺少或早于其对应的源文件,则必须对其进行重建。.build/./foo/bar/baz.lua
声明了一条通用规则,其中每个目标文件(./foo/bar/baz.lua
)都取决于相应的源文件(./foo/bar/
)。配方创建目标目录(dir
),该目录通过luamin
make函数进行计算。然后,它应用$@
命令。该食谱使用了$<
和[('mar', 95), ('Kim', 98) ...]
automatic variables。