2010-10-11 5 views
3

Как добавить дополнительные переменные флага (например, CPPFLAGS), которые будут применяться ко всем make-файлам? В настоящее время мы используем CPPFLAGS, но это должно быть зарезервировано как пользовательская переменная, и я хотел бы зарезервировать его. Я бы предпочел не использовать AM_CPPFLAGS, потому что я хотел бы зарезервировать это для определенного Makefile.amS. Я хочу что-то вроде GLOBAL_CPPFLAGS, которое я мог бы установить в configure.ac, и применить его ко всему. Было бы также неплохо, если бы был способ явно игнорировать флаг.automake: изменить implicity make rule включить дополнительные флаги

Я думаю, что мне нужно сделать, это написать собственное правило make, но как я могу сделать это доступным во всех подпапках, не копируя его в каждый Makefile.am?

ответ

4

Вы не используете CPPFLAGS. Это user variable. То, что я хотел бы сделать что-то вроде этого:

В корне исходной директории создайте файл с именем common.am и определить все, что нужно там:

## common.am 
AM_CPPFLAGS = -DFOO 

Я знаю, что вы сказали, что вы не сделали хочу использовать AM_CPPFLAGS, но выслушайте меня. В ваших индивидуальных подкаталогов, include $(top_srcdir)/common.am и расширять или замещать AM_CPPFLAGS по мере необходимости:

## bar/Makefile.am 
include $(top_srcdir)/common.am 
AM_CPPFLAGS += -DBAR 

Если вы хотите заменить, используйте = вместо +=:

## baz/Makefile.am 
include $(top_srcdir)/common.am 
AM_CPPFLAGS = -DBAZ 
+6

Вместо 'include' вы также можете' AC_SUBST ([AM_CPPFLAGS], ["-Whatever"]) 'из' configure.ac', а затем просто обновлять '+ =' в тех 'Makefile.am', которые в этом нуждаются. – adl

+0

Спасибо, я сделал что-то похожее на это, но решил использовать мои собственные переменные (например, GLOBAL_CPPFLAGS) и AC_SUBST из них из configigure.ac. Затем я включил эти флаги в эквивалентные AM_CPPFLAGS во всех make-файлах, и я включил AM_CPPFLAGS в target_CPPFLAGS. Я думаю, что это дает максимальный общий контроль, а происходящее очень явственно. – deuberger

+0

@deuberger: Если вы имеете в виду, что вы написали 'target_CPPFLAGS = $ (AM_CPPFLAGS)', вам не нужно это делать, поскольку он используется по умолчанию, если не установлен. Если вы имеете в виду, что вы написали 'target_CPPFLAGS = $ (AM_CPPFLAGS) -DFOO', я могу это понять. –

1

Думаю, вы ответили на свой вопрос: вам нужно будет скопировать новое правило в каждый файл makefile.

+1

Ложные. automake поддерживает 'include': http://www.gnu.org/software/hello/manual/automake/Include.html#Include –

+0

Джек, который эффективно копирует правило, о чем его вопрос. –

+0

Я полагаю, что это так, но копирование не выполняется вручную, и есть центральное место для обновления правила или переменной. –

0

CPPFLAGS - механизм, который вы, вероятно, должны использовать. Просто конкатенации флаги, которые вы хотите где-то в configure.ac:

GLOBAL_CPPFLAGS = "- DSOMETHING"

...

CPPFLAGS = "$ CPPFLAGS $ GLOBAL_CPPFLAGS"

, и вы должны быть установлены ,

+2

Нет, это не так. 'CPPFLAGS' - пользовательская переменная. http://www.gnu.org/software/hello/manual/automake/User-Variables.html#User-Variables. Однако 'AC_SUBST'-ing в общих флагах не является ужасной идеей. –

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

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