2015-07-02 47 views
2

在automake的的Makefile.am,程序的來源列出像automake的添加所有的C文件的目錄

bin_PROGRAMS = os345v1

os345v1_SOURCES = os345.c os345interrupts.c os345semaphores.c

而不是指定單個文件,如何將所有的c文件添加到特定的目錄和子目錄中?

回答

-1

GNU make具有通配符功能,例如,

os345v1_SOURCES = $(wildcard *.c) 

有關文件名的其他功能,請參見GNU make手冊部分Filename Functions

任何適用於Makefile的內容也適用於automake,因爲automake會將其automake文件轉換爲Makefile文件。

從這個意義上講,automake是一個宏預處理器。把它看作類似於C語言的C預處理器,除了保存轉換後的文件,一個Makefile以及一個Makefile.am。

+0

我在Makefiles中看到了它。我不知道它也適用於automake – nmxprime

+0

好的。我編輯了答案。如果這樣做,請點擊複選標記接受它。你的聲望會提高,並幫助那些希望幫助別人的人。謝謝。 – rocky

+0

不可以。用戶不能指望用戶使用GNU make,如果你使用非便攜式make功能編寫Makefile.am,那麼你的軟件包就會壞掉。自動工具的重點在於你不強制用戶使用任何特定的工具鏈,並且你不應該強制用戶安裝GNU-make來安裝你的軟件包。 –

3

在automake中使用通配符通常是個好主意。

一方面,您的automake項目可能會與非GNU make實現一起使用(可能無法使用GNU make的擴展,如$(wildcard *.c))。 autotools/automake的優勢之一在於它不受目標系統及其工具鏈的影響。

更重要的是,automake可能需要真正知道你想要建立的源文件。 這對於例如想要構建out-of-source-tree構建(例如,在只讀介質上的源代碼以及構建在其他位置)是很重要的:這是分發的常見用例(例如Debian),它允許在一次運行中輕鬆地從相同源創建多種風格(具有不同的配置標誌)

最後,不使用通配符保護您的構建免受雜散源代碼的影響,例如「foo.c 「和一個備份文件」foo_old.c「(例如,因爲您正在重新實現」foo「並希望檢查舊的實現並希望編輯器自動啓用語法高亮顯示)位於同一文件夾中,可能會不小心建立了兩個文件,導致相同符號的多重定義。

另請參閱automake documentation why automake does not support wildcards

+0

添加新文件是你經常做的事情(基本上一次當你啓動項目時;之後你會發現自己很少添加文件通常只有單個文件)。如果有*許多*文件,您可以執行一個bash腳本來生成一個'Makefile.am'片段,並將其複製並粘貼到實際的automake文件中。 –

+0

在上面的評論我的意思是:「添加新文件是你通常做的事**不**經常做」 –

相關問題