少:创建更少的文件本身

时间:2015-02-17 16:49:40

标签: makefile less

晚上去了,

我是一个全新的文件,并制定了一个符合我们需求的文件,但我并不完全满意。我们使用bootstrap3并且有大约40个客户使用不同的颜色设置。这就是我们需要编译40个略有不同的css文件的原因。到目前为止,我们有以下文件结构

  • less / customer1.less
  • CSS / customer1.css
  • color / customer.less包含bootstraps变量文件

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做到这一点?

1 个答案:

答案 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将必要时创建它们。