2010-10-11 54 views
3

如何添加将应用于所有makefile的额外标志变量(如CPPFLAGS)?目前,我们正在使用CPPFLAGS,但应该将其保留为用户变量,并且我想保留它。我不想使用AM_CPPFLAGS,因为我想保留特定的Makefile.amS。我想要的是类似于GLOBAL_CPPFLAGS的东西,我可以在configure.ac中进行设置并将其应用于所有内容。如果有一种方法可以明确地忽略该标志,那也是很好的。automake:修改隐含使规则包含额外的标志

我认为我需要做的是编写自己的make规则,但是如何让所有子文件夹都可用,而无需将其复制到每个Makefile.am中?

回答

4

你没错,没有使用CPPFLAGS。这是一个user variable。我会做的是这样的:

在你的源代码目录的根目录,创建一个名为common.am文件并定义无论你在那里需要:

## common.am 
AM_CPPFLAGS = -DFOO 

我知道你说你没想用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',你还可以''从'configure.ac'中'AC_SUBST([AM_CPPFLAGS],[“-Whatever”])',然后在那些需要它的'Makefile.am'中用'+ ='更新。 – adl 2010-10-12 06:55:43

+0

谢谢,我做了类似的事情,但选择使用自己的变量(例如GLOBAL_CPPFLAGS)和来自configigure.ac的AC_SUBST。然后,我将这些标志包含在所有makefile中的等效AM_CPPFLAGS中,并将AM_CPPFLAGS包含在target_CPPFLAGS中。我认为这给了最大的整体控制,发生的事情非常明确。 – deuberger 2010-10-12 14:05:35

+0

@deuberger:如果你的意思是你写了'target_CPPFLAGS = $(AM_CPPFLAGS)',你不必这样做,因为它被用作默认值,如果没有设置。如果你的意思是你写了'target_CPPFLAGS = $(AM_CPPFLAGS)-DFOO',我可以看到这一点。 – 2010-10-12 20:12:52

1

我认为你回答了你自己的问题:你将不得不将新规则复制到每个makefile中。

+1

False在你的个人子目录,include $(top_srcdir)/common.am和扩展或覆盖AM_CPPFLAGS需要。 automake支持'include':http://www.gnu.org/software/hello/manual/automake/Include.html#Include – 2010-10-11 23:20:34

+0

杰克,这有效地复制了规则,这是他的问题。 – 2010-10-12 17:56:37

+0

我想它是的,但复制不是手工完成的,并且有一个更新规则或变量的中心位置。 – 2010-10-12 20:13:59

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并不是一个可怕的想法。 – 2010-10-11 23:19:25