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