2008-11-27 7 views
17

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

src/A 
    /B 
    /C 

В каждом, то Makefile.am содержит

AM_CXXFLAGS = -fPIC -Wall -Wextra 

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

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

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

ответ

23

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

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

+0

Использование включают идиомы в Makefile.am сделает Заставляет Automake для вывода зависимостей для Makefile и Makefile.in, что в конечном итоге получить обратно в включенный файл и файл automake. Таким образом, изменение этого приведет и к обновлениям позже. – johnny 2009-02-12 08:27:43

0

Используйте EXTRA_CFLAGS в конфигурации.переменный ток

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

EXTRA_CFLAGS=-fPIC -Wall -Wextra

 Смежные вопросы

  • Нет связанных вопросов^_^