Как определить через "./configure " с функцией Autoconf


У меня есть один проект, который может генерировать два разных приложения на основе одного определения.

libfoo_la_CXXFLAGS = -DMYDEFINE

Я должен изменить Makefile.am чтобы установить это определение, поэтому оно не является автоматическим.

Могу ли я установить это определение каким-либо образом с помощью команды configure? Есть ли другой способ установить один define с помощью autotools?

2 10

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

В наши дни автоподатчик требует

AC_DEFINE([MYDEFINE], [1], [Description here])