Makefile 如何使用make将静态网站构建到dist目录中
我在Makefile 如何使用make将静态网站构建到dist目录中,makefile,gnu-make,Makefile,Gnu Make,我在src目录下有一个网站,有好几个层次,包含html、markdown、less、coffee、png、jpg和其他资产。我想使用make将我的网站构建到dist目录中。我的意思是,有了身材 将标记文件转换为html 将咖啡编译为js 编译更少的css 缩小html文件 缩小js文件(不是从coffee编译的文件) 缩小css文件(不是从less或sass编译的文件) 准备图像(logo.png)logo@1x.png logo@2x.png logo@3x.png) 我有以下文件。cp语
src
目录下有一个网站,有好几个层次,包含html、markdown、less、coffee、png、jpg和其他资产。我想使用make将我的网站构建到dist
目录中。我的意思是,有了身材
- 将标记文件转换为html
- 将咖啡编译为js
- 编译更少的css
- 缩小html文件
- 缩小js文件(不是从coffee编译的文件)
- 缩小css文件(不是从less或sass编译的文件)
- 准备图像(logo.png)logo@1x.png logo@2x.png logo@3x.png)
cp
语句将替换为执行转换的相应工具
sources = $(shell find src -type f)
t1 := $(sources:.md=.html)
t2 := $(t1:.less=.css)
targets := $(t2:.coffee=.js)
targetdirs = $(dir $(targets))
all: $(targets)
%.html: %.md
cp $< $@
%.css: %.less
cp $< $@
%.js: %.coffee
cp $< $@
现在,make会出现以下故障:
make: *** No rule to make target `dist/assets/scripts/app.js', needed by `all'. Stop.
我能找到的大多数示例都局限于单个目录,或者将多个源文件编译成单个目标
如果不知道源目录的内容,如何实现这一点
环境:
- GNU Make 3.81
- OS X 10.11.1
%.html: %.md
mkdir -p $(targetdirs)
cp $< $@
(我不知道为什么要在每个菜谱中创建所有目录,而不仅仅是当前的目录)。现在
dist/index.html
的词干就是index
,前提条件匹配src/index.md
,它会工作。创建所有这些目录的原因是:懒惰。。。我的目标是先让它工作,然后再改进。我验证了它的工作原理。你的回答也给了我必要的背景,让我理解为什么它一开始就不起作用。
%.html: %.md
mkdir -p $(targetdirs)
cp $< $@
dist/%.html: src/%.md
mkdir -p $(@D)
cp $< $@