2012-10-22 40 views
0

我想在編譯時管理一些功能並設置特定的怪癖。因此,我必須能夠修改必須編譯的對象列表,以實現最終目標,編譯命令和鏈接命令。到目前爲止,我一直在使用的需要只有兩種口味的節目,在另一個(比如special)一個只是增加了一些CXXFLAGS和一個目標文件的:目標的可選風格

specialclient: CXXFLAGS+=-DSPECIALBUILD 
specialclient: LDFLAGS+=-lanotherlib 
specialclient: libanotherlib client 

其中client是正常的目標。但現在我需要另一個可選功能(如peculiar),事情開始變得複雜,因爲我希望能夠選擇任何功能組合;但我不想指定peculiarclientspecialpeculiarclient的目標。我希望能夠在命令行中指定每個功能,例如make [special] [peculiar] client

我該如何解決這個問題?

回答

0

一些conditionals應該做的伎倆:

ifdef SPECIAL 
CXXFLAGS+=-DSPECIALBUILD 
LDFLAGS+=-lanotherlib 
client: libanotherlib 
endif 

ifdef PECULIAR 
CXXFLAGS+=-DPECULIARBUILD 
LDFLAGS+=-lyetanotherlib 
client: libyetanotherlib 
endif 

現在你可以make clientmake client SPECIAL=1make client PECULIAR=yesmake client SPECIAL=TRUE PECULIAR=very,或什麼的。