Makefile ничего не сделать для ххх - PullRequest
0 голосов
/ 15 января 2012

Я в замешательстве. Я видел некоторые из подобных вопросов, но ни один из них не решил мою проблему; Итак, у меня есть этот скрипт, который я скачал онлайн, который автоматически сжимает файлы JavaScript, запустив makefile следующим образом:

concatenated.min.js: file1.js file2.js
   java -jar ~/bin/compiler.jar $(addprefix --js=,$^) >$@

У меня есть этот make-файл здесь

JS_TARGETS = a.js b.js c.js d.js

CLOSURE = java -jar ~/bin/compiler.jar
CLOSURE_FLAGS = 

JS_MINIFIED = $(JS_TARGETS:.js=.min.js)
JS_GZIP = $(JS_TARGETS:.js=.js.gz)
JS_MIN_GZIP = $(JS_TARGETS:.js=.min.js.gz)

js: $(JS_TARGETS) $(JS_MINIFIED) $(JS_GZIP) $(JS_MIN_GZIP)

%.min.js: %.js
   $(CLOSURE) $(CLOSURE_FLAGS) --js=$< >$@

В той же директории, что и a.js, b.js, c.js и d.js, у меня есть файл concat.min.js. Затем я запустил make concat.min.js, и make-файл не дает мне ничего сделать для concat.min.js.

Я также думал, что проблема была в том, что я пропускал кусок $(addprefix --js=,$^) >$@ в правиле %.min.js. Но кажется, что он продолжает выдавать мне ту же ошибку, даже когда я добавляю ее в правило. я сделал что-то не так / опечатка? Спасибо.

Ответы [ 2 ]

1 голос
/ 15 января 2012

Строка %.min.js: %.js говорит о том, что «если файл foo.js новее, чем foo.min.js, то foo.min.js устарел, и вот как его обновить».Поэтому, если вы скажете make a.min.js, make обнаружит, что у вас (предположительно) нет файла a.min.js, поэтому он определенно не новее, чем a.js, и поэтому он сделает это с помощью команды в make-файле.

В сообщении, которое вы получаете, говорится: «Вы попросили меня создать concat.min.js, но нет файла concat.js, который был бы более новым, поэтому ... ничего не поделаешь»done ".

Глядя на остальную часть вашего вопроса, я подозреваю, что вы хотите что-то вроде:

concatenated.min.js: $(JS_TARGETS)
   java -jar ~/bin/compiler.jar $(addprefix --js=,$^) >$@

Это гарантирует, что concatenated.min.js новее, чем каждый из файлов, перечисленных в JS_TARGETS.

1 голос
/ 15 января 2012

Это может произойти, если у вас нет файла concat.js.

...