Подтвердить что ты не робот

Autotools: как установить глобальный флаг компиляции

У меня есть проект с несколькими каталогами источников:

src/A
   /B
   /C

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

AM_CXXFLAGS = -fPIC -Wall -Wextra

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

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

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

4b9b3361

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

Ответ 2

Используйте EXTRA_CFLAGS в файле configure.ac

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

EXTRA_CFLAGS=-fPIC -Wall -Wextra