2012-01-03 63 views
3

我有一個應用程序與幾個子目錄,我想要編譯非遞歸。爲此,我將子目錄中的所有文件分成幾個變量,然後在最終的源代碼中使用。事情是這樣的:如何替換Makefile.am中的模式

GUI_SOURCEFILES = Gui/MainWindow.cc \ 
        Gui/StatusBar.cc 
... 
foo_SOURCES = $(GUI_SOURCEFILES) \ 
       $(DATABASE_SOURCEFILES) \ 
       main.cc 

但是現在這迫使我寫Gui/所有GUI sourcefiles和Db\在所有數據庫文件的前面。我認爲應該可以創建這個前綴automaticall,但我找不到一個方法來正確地做到這一點。我想通常讓路:

GUI_SOURCEFILES = MainWindow.cc \ 
        StatusBar.cc 
... 
foo_SOURCES = $(GUI_SOURCEFILES) \ 
       $(patsubst %,Gui/%,$(DATABASE_SOURCEFILES)) \ 
       main.cc 

但自動工具將無法編譯這個Makefile.am可言。

有沒有辦法讓自動工具爲我做到這一點?

+0

'$(addprefix Gui /,$(DATABASE_SOURCEFILES))''? – 2012-01-03 13:25:23

+0

@dma_k:這有同樣的問題:'src/Makefile.am:12:addprefix Gui /,$(GUI_SOURCEFILES:非POSIX變量名'src/Makefile.am:12 :(可能是一個GNU make擴展)' 。我認爲必須有一個非常具體的autotools/m4方法來做到這一點,但是我從來沒有用過很大的擴展。所有的Makefile方式都可能沒有問題。 – LiKao 2012-01-03 13:55:54

+1

@LiKao:一些傳統的makefile結構像後綴替換也可以工作在automake。但是,我不知道一個*前綴*的方法。 – thiton 2012-01-03 14:23:47

回答

3

這裏沒有辦法,所有的文件名必須在automake時間可用,並且這樣就排除了某些類似於函數的函數(非便攜函數)。

+0

文件名是完全可用的。我只是不希望每次都明確添加目錄前綴。就這些。我想我對自動工具運氣不好。 – LiKao 2012-01-03 21:18:11

+1

automake可以擴展* $(addprefix ...)*提供的參數在AM時間是常量和已知的,就像它對* include *所做的一樣,但唉,它當前不會這樣做,這會導致「如果可以的話煮一個補丁,你可以嘗試提交「。 – 2012-01-03 21:57:15