Makefile условно с automake / autoconf - PullRequest
4 голосов
/ 23 ноября 2010

Может кто-нибудь сказать мне, если есть способ вставить условный блок в Makefile.am, чтобы он был передан дальше в Makfile, созданный autotools?

Вот пример:

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

Это, кажется, обычный Makefile способ делать условные вещи.Automake отключает endif-строку и в конце концов make завершается с ошибкой с помощью такого сообщения:

Makefile: 390: * пропущен `endif '.Стоп.

есть мысли?

1 Ответ

3 голосов
/ 23 ноября 2010

Поскольку он также помечен как Autoconf, я предлагаю поместить условие в файл configure.ac, если это возможно.Аналогично так:

AM_CONDITIONAL([CONDITION_NAME], [test x"${SOMEVAR}" != x])

Тогда ваш Makefile.am будет содержать

if CONDITION_NAME
<conditional code>
else
<else :)>
endif

Обновление

Проблема связана с

python setup.py --root=$(DESTDIR) --prefix=$(DESTDIR)$(prefix)

звонят откуда-то.Если DESTDIR пусто, префикс может расширяться до относительного пути, что не то, что вам нужно.Вы подтвердили, что он вызывается с вашего Makefile.am.Тогда есть две вещи, которые вы можете сделать:

  1. Измените приведенную выше команду на python setup.py --root=${DESTDIR}/// --prefix=${DESTDIR}///$(prefix).Тройные косые черты могут быть необходимы, поскольку, AFAIK, POSIX позволяет двойным косым чертам иметь особое значение, но не для трех или более последовательных косых черт.

  2. Измените приведенную выше команду на DESTDIR=${DESTDIR:-///} && python setup.py --root=${DESTDIR} --prefix=${DESTDIR}$(prefix)

Может быть примечательно, что, по моему мнению и ограниченному пониманию всей картины, ничего из этого не должно быть необходимым.Поскольку первоначальный абонент configure смог точно указать, какой prefix он действительно хотел использовать.Если ничего не указано, Autoconf уже по умолчанию использует абсолютный путь (/usr/local).Так что, я думаю, я не совсем понимаю, почему вы столкнулись с вашей проблемой.

...