2010-08-17 25 views
0

我使用GNU Make來構建一個多目錄項目。 我的問題是如何使用單一的生成文件來構建多個設備? 例如我的應用程序必須在各種X,Y,Z移動設備上運行,每個移動設備具有不同的屬性,如屏幕大小,鍵盤類型,平臺版本等。我必須通過make -f <makefilename> <targetname>。這裏的目標名稱可以是設備名稱和型號,如三星CorbyPlus,但我的生成文件必須轉到三星的特定dirname並打開.txt文件或所有上述屬性定義的位置。我必須在構建時讀取所有這些文件,並通過一些宏/定義/標記訪問我的代碼。如何從Makefile讀取文件?

任何人都可以建議如何做到這一點?更好的解決方案,我的要求將不勝感激。

回答

1

我建議使用配置makefile。例如,假設有與它的配置幾個裝置:

config_device1.mk

OPTION1=yes 
OPTION2=0 

config_device2.mk

OPTION1=no 
OPTION2=1 

然後,可以有條件地使用包括它們變成鹼生成文件從命令行傳遞的特殊參數(make -f makefile DEVICE = dev_type1)並使用opt從配置文件中的離子和處理它們:

的makefile

ifeq ($(DEVICE),dev_type1) 
include $(CONFIG_PATH)/config_device1.mk 
endif 

ifeq ($(DEVICE),dev_type2) 
include $(CONFIG_PATH)/config_device1.mk 
endif 

ifeq ($(OPTION1),yes) 
CFLAGS += -DBUILD_OPTION1  
endif 

CFLAGS += -DBUILD_OPTION2=$(OPTION2) 

BTW,長期角度看(如果你沒有時間的限制,現在),最好使用一些已有的構建系統中,閱讀其手冊並堅持其方法論。

+0

沒有'ifeq'函數,可以使用命名約定:例如'include $(CONFIG_PATH)/ config _ $(DEVICE).mk'。 – 2010-08-17 06:46:04

+0

謝謝。對,這只是一個例子,全部取決於特定的構建環境,架構,項目中使用的約定(應由所有參與者開發和遵循) – pmod 2010-08-17 07:50:12

+0

任何人都可以告訴我如何攜帶已分配的宏/變量/標誌的值在makefile中我的代碼? 例如在上面的代碼片段中,如果我分配SCREENSIZE = 17X220,並且想要在代碼中使用此SCREENSIZE宏值,我該怎麼做? 因爲其他的0/1,所以只能通過#ifdef或#ifndef等代碼檢查true/false值。 – Aahna 2010-08-30 06:02:16