Вы можете сделать несколько вещей:
(1) Одним из решений является включение общего фрагмента файла makefile во все ваши Makefile.am
:
include $(top_srcdir)/common.mk
...
bin_PROGRAMS = foo
foo_SOURCES = ...
в таком случае вы бы написали
AM_CXXFLAGS = -fpic -Wall -Wextra
на common.mk
, и в будущем будет проще добавлять дополнительные макросы или правила ко всем Makefile.am
, просто редактируя этот файл.
(2) Другим решением было бы установить эти переменные глобально в вашем configure.ac
(имя configure.in
давно устарело), как в:
...
AC_SUBST([AM_CXXFLAGS], [-fpic -Wall -Wextra])
...
Тогда вам даже не нужно ничего говорить в ваших Makefile.am
, они автоматически наследуют это глобальное определение. Недостатком является то, что вы не можете легко отказаться (с первым решением легко решить не включать common.mk
), и зависимость на самом деле не является явной для сторонних людей (когда они читают Makefile.am
, у них нет намека на то, где флаги могут исходить).
(3) Третье решение — сделать так, как предложил orsogufo: перезаписать пользовательскую переменную CXXFLAGS в configure.ac
. Я бы не советовал этого делать, потому что это противоречит одной из особенностей системы сборки GNU: пользователям разрешено переопределять эту переменную в make
-время. Например, вы можете ввести
make CXXFLAGS='-O0 -ggdb'
при отладке фрагмента кода, и это перезапишет любое определение CXXFLAGS
(но не AM_CXXFLAGS
). Честно говоря, большинство проектов не поддерживают это правильно, потому что они шутят с CXXFLAGS
.
Наконец, я должен упомянуть, что -fpic
, -Wall
и -Werror
не являются переносимыми параметрами. В зависимости от масштаба вашего проекта вы можете добавить проверку конфигурации для них (gnulib недавно приобрел новые макросы для проверки флагов предупреждений, а libtool можно использовать для создания общих библиотек) .
person
adl
schedule
28.11.2008