Автоинструменты: как установить глобальный флаг компиляции - PullRequest
19 голосов
/ 27 ноября 2008

У меня есть проект с несколькими исходными каталогами:

src/A
   /B
   /C

В каждом файле Makefile.am содержится

AM_CXXFLAGS = -fPIC -Wall -Wextra

Как можно избежать повторения этого в каждой исходной папке?

Я пытался изменить src / Makefile.am и configure.in, но безуспешно. Я думал, что смогу использовать AC_PROG_CXX, чтобы установить флаги компиляции глобально, но не могу найти много документации о том, как использовать этот макрос (у вас есть какой-нибудь указатель на такую ​​документацию?).

Заранее спасибо

Ответы [ 2 ]

25 голосов
/ 28 ноября 2008

Вы можете сделать несколько вещей:

(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 можно использовать для создания общих библиотек) .

0 голосов
/ 17 марта 2016

Использовать EXTRA_CFLAGS в configure.ac

Например, для вашего случая это будет:

EXTRA_CFLAGS=-fPIC -Wall -Wextra

...