У меня была такая же проблема. Когда я проверил, я увидел, что есть 2 класса с одинаковыми именами, по 1 в каждом из добавленных мной внешних jar-файлов. Мне пришлось удалить 1 из файла фляги. К счастью, я получил еще один файл jar для 1, который я удалил.
В том, как вы его используете, разницы нет. Однако, если бы ваш макрос GREP был функцией, принимающей параметры, вам пришлось бы использовать $ (call) для передачи ему параметров. Например:
define GREP
$(shell grep $1 $2)
endef
FOO:=$(call GREP,abc,words.txt)
Это приводит к замене $ 1
на «abc» и $ 2
на «words.txt».
Подробнее см. В руководстве пользователя GNU make. -определенные функции здесь: http://www.gnu.org/software/make/manual/make.html#Call-Function
Надеюсь, это поможет,
Эрик Мельски