我是一个全新的文件,并制定了一个符合我们需求的文件,但我并不完全满意。我们使用bootstrap3并且有大约40个客户使用不同的颜色设置。这就是我们需要编译40个略有不同的css文件的原因。到目前为止,我们有以下文件结构
customer1.less包含
@variables: 'myCompany/color/customer1'; //this is forwarded to where bootrstrap loads the variables template
@import "bootstrap";
@import 'myCompany/modifications';
我们的makefile
SOURCES = $(shell ls less/*.less)
# Files we don't want to be build
SOURCES := $(filter-out less/bootstrap.less, $(SOURCES))
SOURCES := $(filter-out less/a11y.less, $(SOURCES))
TARGETS = $(patsubst less/%.less,css/%.css,$(SOURCES))
DEPEND = $(patsubst less/%.less,make/%.d,$(SOURCES))
css/%.css: less/%.less
# First building dependency files
lessc -M $< $@ > 'make/$*.d'
# Then building CSS and sourcemap
lessc -s $< > $@ --source-map=map/$*.css.map --source-map-basepath=map --clean-css
-include $(DEPEND)
all: $(TARGETS)
呼叫
$ make all
在make /中创建Makefile,在map /中的css / CSS source-maps中创建CSS,并期望LESS在less /中。
这样可行但我们需要手动为每个客户创建customerX.less,即使唯一的区别是指定的颜色方案/变量文件。 如果有这个customerX的文件,Make应查看颜色文件夹,然后在less目录中创建(但不覆盖!)customerX.less。
任何制作大师都知道如何用make做到这一点?
答案 0 :(得分:1)
我相信你可以用order-only prerequisite来做你想做的事。
类似的东西:
less/customer%.less: | color/customer.less
[ -f '$@' ] || cp $^ $@
我不认为 -f
测试在那里是绝对必要的,但它不应该受到伤害并且更安全。
对于$(shell ls less/*.less)
,您可能可以更好地完成另一个主题$(shell echo less/*.less)
(您不关心只需要ls
进行shell glob扩展)或{ {1}}。 (技术上的外壳和外卡略有不同,但我不知道这对你来说很重要。)
另请注意,$(wildcard less/*.less)
目标不会为您创建这些丢失较少的文件(由于all
不会包含它们,因为文件不存在),但SOURCES
将必要时创建它们。