Есть ли способ сказать automake не интерпретировать часть automakefile? - PullRequest
4 голосов
/ 16 сентября 2011

Есть ли способ сказать automake не интерпретировать часть Makefile.am?

В частности, я пытаюсь кодировать условный Makefile в Makefile.am.Как отметили другие люди , это не работает, потому что automake интерпретирует конструкцию endif.

Есть ли какой-либо способ экранировать или заключать в кавычки строки в файлах Makefile.am, чтобы их автоматически копировалв целевой файл Makefile?В частности, я не хочу, чтобы он интерпретировал endif что-то вроде:

ifeq "$(SOMEVAR)" ""
SOMEVAR="default_value"
endif

Ответы [ 3 ]

6 голосов
/ 27 декабря 2011

Причина, по которой automake делает условия, заключается в том, что некоторые динозавры делают это не так. Тем не менее, если вы действительно должны это сделать, вы можете определить свой фрагмент как переменную в configure.ac и AC_SUBST в свой Makefile. Таким образом, у автопроизводителя не будет возможности это увидеть. Не забудьте использовать AM_SUBST_NOTMAKE, чтобы избежать создания строки типа FOO = @FOO@.)

dnl In configure.ac:
snippet='
ifeq ($(somevar),Y)
foo
endif
'
AC_SUBST([snippet])
AM_SUBST_NOTMAKE([snippet])

и

## In Makefile.am:
@snippet@

Я искренне надеюсь, что есть лучший способ, чем этот.

2 голосов
/ 07 марта 2012

Мне удалось найти другое решение.Вы можете поместить биты, которые должны быть экранированы, в отдельный файл, а затем выполнить:

$(eval include $(srcdir)/Include.Makefile)

Так как automake не понимает $(eval, он просто оставляет целую строку нетронутой.Таким образом, вы можете поместить все, что хотите, в другой файл, и GNU make с радостью прочитает его.Обратите внимание, что вы не можете просто использовать include напрямую, поскольку Automake понимает это и перейдет в другой файл.

0 голосов
/ 16 сентября 2011

Как насчет:

SOMEVAR=$(if $(SOMEVAR),$(SOMEVAR),"default_value")
...