Как определить через "./configure " с функцией Autoconf
У меня есть один проект, который может генерировать два разных приложения на основе одного определения.
libfoo_la_CXXFLAGS = -DMYDEFINE
Я должен изменить Makefile.am чтобы установить это определение, поэтому оно не является автоматическим.
Могу ли я установить это определение каким-либо образом с помощью команды configure? Есть ли другой способ установить один define с помощью autotools?
2 ответа:
Вы должны отредактировать файл
configure.ac
, а передAC_OUTPUT
(что является последним в файле) добавить вызовAC_DEFINE
.В таком простом случае, как ваш, должно быть достаточно:
AC_DEFINE(MYDEFINE)
Если вы хотите задать значение, вы используете:
AC_DEFINE(MYDEFINE, 123)
Этот последний добавит
-DMYDEFINE=123
к флагам, или#define MYDEFINE 123
в сгенерированный заголовок autoconf, если вы его используете.Я рекомендую вам прочитать документацию с самого начала и проработать их примеры и учебные пособия. Также проверьте другое проекты настраивают файлы, чтобы увидеть, как они используют различные функции.
Edit: Если вы хотите передать флаги в командной строке команде
make
, то вы делаете что-то вроде этого:libfoo_la_CXXFLAGS = $(MYFLAGS)
Тогда вы называете
make
так:$ make MYFLAGS="-DMYDEFINE"Если вы не зададите
MYFLAGS
в командной строке, он будет неопределенным и пустым в файле makefile.Вы также можете задать целевой
CPPFLAGS
вMakefile.am
, в этом случае исходные файлы будут перекомпилированы один раз для каждого набора флаги:lib_LTLIBRARIES = libfoo.la libbar.la libfoo_la_SOURCES = foo.c libfoo_la_CPPFLAGS = -DFOO libbar_la_SOURCES = foo.c libbar_la_CPPFLAGS = -DBAR