Ответ 1
Вы можете сделать несколько вещей:
(1) Одним из решений является включение общего фрагмента файла makefile во все ваши Makefile.am
s:
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
s, они автоматически наследуют это глобальное определение. Недостатком является то, что вы не можете легко отказаться (при первом решении легко принять решение не включать common.mk
), и зависимость на самом деле не является явной для сторонних людей (когда они читают Makefile.am
, они имеют нет намека на то, откуда могут появиться флаги).
(3) Третьим решением было бы сделать как orsogufo: переписать пользовательскую переменную CXXFLAGS в configure.ac
. Я бы посоветовал это, потому что он победил одну из функций GNU Build System: пользователям разрешено переопределять эту переменную в make
-time. Например, вы можете ввести
make CXXFLAGS='-O0 -ggdb'
при отладке фрагмента кода, и это перезапишет любое определение CXXFLAGS
(но
а не в AM_CXXFLAGS
). Честно говоря, большинство проектов не поддерживают это правильно, потому что они играют трюки с помощью CXXFLAGS
.
Наконец, я должен упомянуть, что -fpic
, -Wall
и -Werror
не являются переносимыми опциями.
В зависимости от объема вашего проекта вы можете добавить для них проверку configure (gnulib недавно приобретенные новые макросы для тестов на флаги предупреждений, и libtool можно использовать для создания разделяемых библиотек).