2013-07-16 139 views
0

我有一個項目,其中包括C++和Java代碼來設計建造的最好方式, 結構現在看起來像:的makefile,什麼是幾個子目錄

dev -- |--- display1 (sub makefile:needs compile both c++ and java) 
     |--- display2 
     |--- ddv  (sub makefile: needs compile both c++ and java) 
     |--- def 
     |--- Install (makefile: call sub makefiles in the other 4 folders) 

我不知道他們是否有其他更好的方法處理這個案件。 例如,如果有方法可以在子目錄中使用source生成makefile,則只需使用一個makefile即可。任何建議將不勝感激。

我是新來的Makefile,希望能在這裏得到很好的建議。謝謝!

回答

1

如果您是新的做,你應該用簡單的任務開始,工作到複雜的。

假設你有display1/disp1.cc,希望建設display1/disp1.o。您可以在Install/Makefile做到與規則:

display1/disp1.o: display1/disp1.cc 
    g++ -c display1/disp1.cc -o display1/disp1.o 

把那完美的工作,然後再繼續。然後你可以有幾個這樣的規則在Install/Makefile

display1/disp1.o: display1/disp1.cc 
    g++ -c display1/disp1.cc -o display1/disp1.o 

display1/foo1.o: display1/foo1.cc 
    g++ -c display1/foo1.cc -o display1/foo1.o 

display1/foo2.o: display1/foo2.cc 
    g++ -c display1/foo2.cc -o display1/foo2.o 

然後你就可以使用自動變量,以使規則更清潔:

display1/disp1.o: display1/disp1.cc 
    g++ -c $< -o [email protected] 

display1/foo1.o: display1/foo1.cc 
    g++ -c $< -o [email protected] 

display1/foo2.o: display1/foo2.cc 
    g++ -c $< -o [email protected] 

把那完美的工作,然後再繼續。然後你可以用一個pattern rule取代所有這些規則:

display1/%.o: display1/%.cc 
    g++ -c $< -o [email protected] 

把那工作......好吧,你的想法。然後,你可以寫更多的模式規則的其他目錄:

display1/%.o: display1/%.cc 
    g++ -c $< -o [email protected] 

display2/%.o: display2/%.cc 
    g++ -c $< -o [email protected] 

ddv/%.o: ddv/%.cc 
    g++ -c $< -o [email protected] 

def/%.o: def/%.cc 
    g++ -c $< -o [email protected] 

然後四個模式規則涵蓋了Java(我可能會嘗試,但我不是一個javanaut。)

然後你可以編寫目標列表並將其保存在各自的目錄中,並使用include指令將它們拉入Install/Makefile

還有更多你可以做,但很多應該讓你忙一陣子。讓我們知道你是否遇到麻煩。