2011-05-22 56 views
1

我把我的代碼組織成任意的目錄結構。例如,我有一個包含源文件,頭文件,其他目錄的目錄,每個目錄包含其他源和頭文件以及其他可能的目錄等等。任意結構的Makefile設計

我想創建一個編譯每個.c文件的GNU makefile .o文件,然後將所有.o文件合併到可執行文件中。

如果我使用bash要做到這一點,它會是這樣的:

for c in `find . -type f -name \*.c`; do 
    gcc -c $c 
done 

find . -type f -name \*.o | xargs gcc -o main 

我可以做GNU類似的東西做什麼呢?

回答

4

是的,絕對。你可以很容易地定義一個變量作爲shell命令的結果;使用find命令定義一個SRC變量,並使您的目標可執行文件取決於SRC;即

SRC = $(shell find . -type f -name \*.c) 

executable: $(SRC:.c=.o) 
    gcc -o [email protected] $^ 
+0

如果不使用shell,GNU是不是支持這樣的東西? – rid 2011-05-22 14:33:25

+0

我可能有一些特殊的通配符(雙星號?),但我不記得我的頭頂。殼形式適合我。 – 2011-05-22 16:04:35

+1

使通配符不是很靈活。這可能是你能做的最好的。 – Beta 2011-05-22 22:12:31