2010-10-11 55 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