ABS(Android Build System)中在編譯時間產生原始碼檔案

來源:互聯網
上載者:User

ABS(Android Build System)中在編譯時間產生原始碼檔案

編譯時間經常有的需求是有些.c或者.h檔案需要在編譯時間由某個介面定義檔案產生。同時還可能有下面的需求:
* 同一個介面定義檔案會用於產生多個源檔案。
* 產生的源檔案可能會被其它的Project使用。

舉例來說,現在需要從介面定義檔案xxx.xml通過可執行檔generator產生源檔案xxx_A.h,xxx_B.h和xxx_C.c。命令為:
generator A < xxx.xml > xxx_A.h
generator B < xxx.xml > xxx_B.h
generator C < xxx.xml > xxx_C.c

一個方法是用ABS裡定義的transform-generated-source函數:

GENERATOR := $(HOST_OUT_EXECUTABLES)/generator$(HOST_EXECUTABLE_SUFFIX)                                      IDL_DIR := ./                                                                                                 IDL_SRC := $(IDL_DIR)/xxx.xml                                                                                    IDL_TGT_CODE := $(IDL_DIR)/xxx_C.c                                                                        IDL_TGT_A := $(IDL_DIR)/xxx_A.h                                                        IDL_TGT_B := $(IDL_DIR)/xxx_B.h                                                                                                                                                                                 GEN := $(LOCAL_PATH)/$(IDL_TGT_A)                                                                          $(GEN): PRIVATE_PATH := $(LOCAL_PATH)                                                                                    $(GEN): PRIVATE_CUSTOM_TOOL = $(GENERATOR) A < $< > $@                                                 $(GEN): $(LOCAL_PATH)/$(IDL_SRC)                                                                                           $(transform-generated-source)                                                                                                                                                                                                                 LOCAL_GENERATED_SOURCES += $(GEN)                                                                                                                                                                                                                 GEN := $(LOCAL_PATH)/$(IDL_TGT_B)                                                                          $(GEN): PRIVATE_PATH := $(LOCAL_PATH)                                                                                    $(GEN): PRIVATE_CUSTOM_TOOL = $(GENERATOR) B < $< > $@                                                 $(GEN): $(LOCAL_PATH)/$(IDL_SRC)                                                                                           $(transform-generated-source)                                                                                                                                                                                                                 LOCAL_GENERATED_SOURCES += $(GEN)                                                                                                                                                                                                                 GEN := $(LOCAL_PATH)/$(IDL_TGT_CODE)                                                                                   $(GEN): PRIVATE_PATH := $(LOCAL_PATH)                                                                                    $(GEN): PRIVATE_CUSTOM_TOOL = $(GENERATOR) C < $< > $@                                                          $(GEN): $(LOCAL_PATH)/$(IDL_SRC) $(LOCAL_PATH)/$(IDL_TGT_A) $(LOCAL_PATH)/$(IDL_TGT_B)         $(transform-generated-source)                                                                                                                                                                                                                 LOCAL_GENERATED_SOURCES += $(GEN)      ...LOCAL_SRC_FILES := \                    $(IDL_TGT_CODE) \                 ...

 

如果介面定義檔案有多個,比如可能有a.xml, b.xml等等,那可能下面方法更方便一些。
 

GENERATOR := $(HOST_OUT_EXECUTABLES)/generator$(HOST_EXECUTABLE_SUFFIX) IDL_DIR := ./     IDL_TGT_CODE := $(IDL_DIR)/xxx_C.c                                                                                                                                                          define transform-generated-A                                        @echo "target Generated $@ <= $<"                                                         $(GENERATOR) A < $< > $@                                                endef                                                                                                                                                                               define transform-generated-B                                        @echo "target Generated $@ <= $<"                                                         $(GENERATOR) B < $< > $@                                                endef                                                                                                                                                                               define transform-generated-C                                               @echo "target Generated $@ <= $<"                                                         $(GENERATOR) C < $< > $@                                                         endef                                                                                                                                                                               $(LOCAL_PATH)/$(IDL_DIR)/%_A.h : $(LOCAL_PATH)/$(IDL_DIR)/%.xml             $(transform-generated-A)                                                                                                                                  $(LOCAL_PATH)/$(IDL_DIR)/%_B.h : $(LOCAL_PATH)/$(IDL_DIR)/%.xml             $(transform-generated-B)                                                                                                                                  $(LOCAL_PATH)/$(IDL_DIR)/%-C.c : $(LOCAL_PATH)/$(IDL_DIR)/%.xml                    $(transform-generated-C)                                               ...LOCAL_SRC_FILES := \                    $(IDL_TGT_CODE) \                 ...LOCAL_ADDITIONAL_DEPENDENCIES += $(LOCAL_PATH)/xxx_A.h  $(LOCAL_PATH)/xxx_B.h   

 

另外如果想編譯出來的image中某幾個特定binary帶symbol,可以在Android.mk中加:

LOCAL_STRIP_MODULE := false

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.