2013-06-18 27 views
1

而不是我的代碼目前有的扁平結構,我想將它組織成包含在子文件夾中的模塊(如果模塊足夠大,也許還有子子文件夾)。哪個構建系統最「自然」做到這一點?

每個模塊將有一個或多個翻譯單元,每個翻譯單元將產生一個.o文件。 最終目標是將所有這些目標文件混合到一個靜態庫(現在)。

我使用普通的'make',它已經夠複雜了。
與使用手工編寫makefiles相比,是否有一個系統可以自然地指定模型或者花費更少的工作量? (如果你要推薦的cmake,我需要一些提示,因爲我已經嘗試過,並不能拿出一個很好的解決方案。)

+0

「make」有什麼問題? –

+0

繁瑣,我認爲我的無知。我找不到使用make的簡單方法。 – manasij7479

+0

好的 - 回答GNU make。讓我知道你是否想要更多的解釋。我確信有人對cmake或更多的東西有更多的瞭解,最終會回答。 –

回答

2

從我的當前項目的生成文件的一些轉述位,可以幫助你解決好老老式GNU化妝:

SOURCEDIR := dir1 dir2/subdir1 dir3 dir4 dir5/subdir1 dir6/subdir1 
SOURCES := $(foreach srcdir,$(SOURCEDIR),$(wildcard $(srcdir)/*.c)) 
OBJECTS := $(patsubst %.c,build/%.o,$(SOURCES)) 
OBJDIRS := $(addprefix build/,$(SOURCEDIR)) 
MAKEDEPS := $(patsubst %.c,build/%.d,$(SOURCES)) 

all: example 

$(OBJDIRS): 
    -mkdir -p [email protected] 

build: $(OBJDIRS) 

build/%.o : %.c | build 
    cc -MMD -c -o [email protected] $< 

example: $(OBJECTS) 
    cc -o [email protected] $(OBJECTS) 

-include $(MAKEDEPS) 

從本質上講,它建立如果多個來源的所有在指定的目錄插入位於build目錄層次結構中的,平行的源目錄佈局的子目錄中的目標文件中找到的源文件(重要文件具有相同的名稱),然後將結果鏈接到可執行文件example

作爲獎勵,通過MAKEDEPS變量和clang的-MMD標誌生成和包含動態依賴項。

+0

謝謝。那個通配符是我絆倒的東西。 – manasij7479

+0

我最終(如果需要)必須修改它以在文件夾中使用遞歸生成文件,但這不應構成太大的問題。 – manasij7479

+0

遞歸makefile有自己的一套痛苦,但取決於你的項目有多大,它應該沒問題。 –

0

它確實取決於你的目的:構建包通常是面向觀衆而不是演員。他們經常考慮人們部署的不同環境。我玩弄了'tup',這看起來更像是一種在編輯後儘快生成可執行文件的方式。 「Premake」似乎在多個平臺上拍攝,但我發現指定的編譯器選項不比Cmake更開明。

看起來好像你找到了一個好的Makefile導師,所以我會留下我的觀察。