Неправильное расширение переменной в Makefile.am - PullRequest
1 голос
/ 21 марта 2019

Я застрял со странным расширением переменной.Позвольте мне объяснить.

У меня есть проект, который использует automake, составленный из configure.ac, Makefile.am.В основном, в Makefile.am я делаю:

ARCH = $(shell ${CURDIR}/./arch.sh)
...
noinst_HEADERS = license/${ARCH}/lchecker.h
proj_SOURCES = main.c license/${ARCH}/lchecker.c
proj_LDFLAGS = -avoid-version -Llicense/${ARCH}

. / Arch делает просто uname -m для определения необходимой архитектуры, потому что я должен ввести правильный каталог.

Когда я запускаю сборку, у меня появляется эта ошибка:

Makefile:622: license/x86_64/.deps/lchecker.Po: No such file or directory
make[1]: *** No rule to make target 'license/x86_64/.deps/lchecker.Po'.  Stop.

, и если я вхожу в каталог license, я замечаю новый созданный каталог с именем ${ARCH}/, где я нахожу отсутствующий .deps из license/x86_64.

Я почти уверен, что это некорректная проблема расширения;Я пробовал много способов, но потерпел неудачу.

Может кто-нибудь объяснить мне правильный способ сделать это?Читая по сети, я вижу, что Makefile.am имеет синтаксис, отличный от Makefile.

ОБНОВЛЕНИЕ:

Я попытался добавить некоторые изменения, чтобы увидеть, если переменнаяправильно определено:

AC_DEFINE([ARCH], ["$ARCH"], [arch check])

echo ARCH = "$ARCH" printf x86_64, поэтому переменная определена в файле configure.ac, но расширение снова неверно в Makefile.am.

1 Ответ

2 голосов
/ 21 марта 2019

В вашем configure.ac используйте макрос AC_SUBST(varname,[value]) создать make-переменную varname в каждом сгенерированном make-файле, который будет иметь значение, для которого value был оценен во время создания make-файла. value может быть расширением оболочки. Так, например,

AC_SUBST(ARCH,[`./arch.sh`])

in configure.ac создаст в каждом make-файле назначение:

ARCH = x86_64

при условии, что x86_64 является стандартным выводом ./arch.sh в ./configure -time в каталоге сборки. Затем вы можете предположить, что эта переменная в вашем Makefile.am и напишите как:

noinst_HEADERS = license/${ARCH}/lchecker.h
...