LINUX.ORG.RU

GNU Make vs pmake


0

0

Есть такой код для pmake(subdir.mk):

TARGETS=all clean install
.PHONY: all clean install
.MAIN: all

.for dir in ${SUBDIR}
.for targ in ${TARGETS}
.PHONY: ${targ}-${dir}
${targ}-${dir}: .MAKE
        @echo "${targ} ===> ${_THISDIR_}${dir}"
        @cd ${.CURDIR}/${dir}; ${MAKE} ${targ}
${targ}: ${targ}-${dir}
.endfor
.endfor

${TARGETS}:

Использую его в своем Makefile так:
SUBDIR=src doc

.include "subdir.mk"

Возможно ли это все как-то переписать на GNU Make. Циклов for в нем походу нет вообще. Можно конечно через eval и call, но получается уродство. Объясните, чем GNU Make лучше NetBSD-шного pmake?
anonymous
Ответ на: комментарий от klalafuda

Просто похоже он еще и хуже. Без automake многое очень сложно реализовать, а от autotools вообще мусора много.

anonymous
()
Ответ на: комментарий от anonymous

> Просто похоже он еще и хуже. Без automake многое очень сложно реализовать, а от autotools вообще мусора много.

ну все-таки autotools и gmake - это птицы несколько разного полёта и так просто в лоб их сравнивать IMHO некорректно.

// wbr

klalafuda ★☆☆
()
Ответ на: комментарий от klalafuda

Я сравниваю gmake и pmake: то, что в pmake делается с помощью include и небольшого mk-файла в gmake делается с помощью стороннего automake. Похоже, что тут GNU все-таки проигрывает BSD.

anonymous
()
Ответ на: комментарий от anonymous

> Я сравниваю gmake и pmake: то, что в pmake делается с помощью include и небольшого mk-файла в gmake делается с помощью стороннего automake

А что такого умеет include в pmake, но не умеет include в gmake?

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

Я про реализацию SUBDIRS. Глянь первое сообщение. В pmake это делается с помощью .for

Как сделать тоже самое через gmake?

anonymous
()
Ответ на: комментарий от anonymous

>Как сделать тоже самое через gmake?

Я не знаю pmake. Если обычным языком скажешь, что пытаешься сделать...

tailgunner ★★★★★
()

можно делать через шелл, зачем для этого make использовать?

subdirs:
          for i in $(SUBDIRS); do $(MAKE) -C $$i || exit 1; done

или так:

%::
          for i in $(SUBDIRS); do $(MAKE) -C $$i $@ || exit 1; done

no1sm ★★
()
Ответ на: комментарий от no1sm

>foreach не подойдет? > >$(foreach var,list,text);

Пробовал использовать, но как мне в text запихнуть многострочный текст?

>можно делать через шелл, зачем для этого make использовать? > >subdirs: > for i in $(SUBDIRS); do $(MAKE) -C $$i || exit 1; done > >или так: > >%:: > for i in $(SUBDIRS); do $(MAKE) -C $$i $@ || exit 1; done

Вот это вроде неплохо, я такое через .DEFAULT делал, но в этом случае кроме make clean, make all etc. Ничего не работает. А в моем варианте есть кроме SUBDIR еще переменная TARGETS, с помощью которой можно определить, например, TARGETS=all clean install и потом юзать make all-src, make clean-src, make install-src, make all-doc etc.

anonymous
()
Ответ на: комментарий от no1sm

> можно делать через шелл, зачем для этого make использовать?

Подозреваю, что то, что сделано через .for в pmake будет нормально работать с -j, а то, что сделано через shell, будет непараллельно. Если что-то не поменялось.

watashiwa_daredeska ★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.