2014-01-08 81 views
1

我有一個makefile文件,裏面列出了許多要構建的靜態庫,每個文件夾都有自己的子文件夾。我在頂層Makefile中定義它們是這樣的:makefile可以使用一行構建多個目標嗎?

LIBS= \ 
lib1 \ 
lib2 \ 
etc... 

我試圖讓makefile文件到CD到使用這些名稱每個子文件夾(如LIB/LIB1,LIB/LIB2)和建每庫makefiles找到。我可以用一個目標來做到這一點,而不是爲每個圖書館單獨制定目標嗎?

事情是這樣的:

libs : $(LIBS) 

$(LIBS) : 
    if [ -f /lib/${@}/makefile ]; then cd /lib/${@}; make; fi 

我不知道$ @是正確的變量在這裏,因爲只有第一個庫建立。

非常感謝!

+0

你是否被迫使用手工makefiles?如果不是,則查看自動構建系統,例如autotools –

回答

1

您提供的makefile片段(大部分)是正確的,應該按照您的預期工作。如果你的真正的makefile沒有按預期工作,這意味着它和你在這裏提供的例子有些不同。在這種情況下,我們無法提供幫助。請剪切並粘貼一個實際失敗的示例,以及您調用的命令和make的輸出。

一個說明,你應該永遠調用子品牌時使用靜態make命令。 總是使用$(MAKE)變量。

+0

謝謝!問題是隻有$ LIBS中的第一個庫被構建。 – James

+0

是的,所以你在你的原始問題中明確表示。這是沒有用的,因爲你提供的makefile文件肯定會建立所有的庫。因此,如果只建立第一個庫,那麼您在這裏給出的環境描述與您在看到錯誤時使用的ACTUAL環境之間存在一些差異。在這種情況下,我們無法幫助您解決問題。這裏有一個問題:如果你運行'make libs',它是否構建它們全部?你確定你已經把'libs'作爲_FIRST_目標放在你真正的makefile中,正如你在上面的問題中展示的那樣? – MadScientist

+0

謝謝 - 這是錯誤的順序。請原諒錯誤:) – James

1

使用'foreach'函數將簡化規則。我認爲下面的生成文件將工作正常(未測試):

LIBS := lib1 lib2 lib3 


libs: 
    [email protected]$(foreach l, $(LIBS), make -C /lib/$(l)) 
相關問題