2015-02-17 1 views
1

Goog вечер,МИНУС: сделать, чтобы создать меньше файлов сам

Я совершенно новой для Makefiles и разработал файл, который соответствует нашим потребностям хорошо, но я не полностью удовлетворен. Мы используем bootstrap3 и имеем около 40 клиентов с различными настройками цвета. Вот почему нам нужно скомпилировать 40 немного разных css-файлов. До сих пор мы имеем следующую структуру файла

  • меньше/customer1.less
  • CSS/customer1.css
  • цвета/customer.less содержит бутстрэпы переменного файл

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 $< [email protected] > 'make/$*.d' 
    # Then building CSS and sourcemap 
    lessc -s $< > [email protected] --source-map=map/$*.css.map --source-map-basepath=map --clean-css 
-include $(DEPEND) 
all: $(TARGETS) 

Вызов

$ make all 

Создает Makefiles в гриме /, CSS в CSS/CSS-источников карт на карте/и ожидает МЕНЬШЕ быть меньше /.

Это работает, но мы должны создать customerX.less для каждого клиента вручную, даже если единственным отличием является назначенный файл цветовой схемы/переменных. Make должен выглядеть в папке с цветом, если есть файл для этого клиентаX, а затем создать (но не перезаписывать!) CustomerX.less в меньшей директории.

Любой гуру здесь знает, как это сделать с помощью make?

+0

Кажется, что в файле makefile все еще что-то не так. Для клиента1 все в порядке. Но он не обновляет клиента2. Этот behevior зависит от порядка в включенной statemant. Если я сначала включу customer2, все работает для этого клиента, но тогда клиент1 отсутствует. Кто-нибудь знает, почему? Уже пыталась установить новую переменную DEPEND, которая содержит зависимости. Тем не менее та же проблема с порядком зависимости. – Corni

+0

Это произошло потому, что я назвал «make», а не «make all». Я улучшил код выше. – Corni

ответ

1

Я считаю, что вы можете делать то, что хотите здесь, с помощью order-only prerequisite.

Что-то вроде:

less/customer%.less: | color/customer.less 
     [ -f '[email protected]' ] || cp $^ [email protected] 

Я не думаю, что тест -f строго необходимо там, но это не должно быть больно и безопаснее.

На другой теме $(shell ls less/*.less), вероятно, можно было бы сделать лучше либо $(shell echo less/*.less) (вы не заботитесь о том, что ls делает вы хотите просто расширение Глоб оболочки) или $(wildcard less/*.less). (Технически обстрелы и подстановочные знаки немного отличаются, но я не знаю, что это будет иметь для вас значение здесь.)

Также обратите внимание, что цель all не создаст эти недостающие файлы для вас (поскольку SOURCES не будет содержать их поскольку файл не существует), но make css/customer#.css создаст их, если необходимо.

+0

Большое спасибо за ваш ответ. У меня не было времени попробовать, но, но сделаю! – Corni

Смежные вопросы