在bp檔案中新增編譯控制

2021-10-10 10:36:59 字數 1744 閱讀 8778

適用平台:q平台、r平台

遇到的問題:在產品的boardconfig.mk中定義的編譯控制,只能在android.mk檔案中使用,無法在android.bp檔案使用。

上圖中的 debuggable 關鍵字就是編譯控制,意思是編譯debug版本時設定兩個巨集定義為1(預設為0)。

搜尋原始碼,在build/make/core/soong_config.mk檔案中找到了 debuggable 的定義,實現了target_build_variant (mk中定義)和 debuggable(bp中使用) 的關聯,截圖如下:

build/soong/android/variable.go檔案中找到了 debuggable 結構的定義,結構體中指明了可以控制的範圍,截圖如下:

下面我們來定義自己的控制feature,作用是控制user版本上remount功能的開啟。預設情況下,user版本時不支援remount功能的,為了除錯的方便,新增了編譯控制。在需求存在的情況下,可以編譯出支援remount功能的user版本,提高開發效率。下面給出詳細的新增步驟。

1、在build/make/core/soong_config.mk檔案中定義 remount_on_user 編譯控制,和boardconfig.mk中的 product_allow_remount_on_user 關聯。

2、在build/soong/android/variable.go檔案中新增如下兩部分。

定義 remount_on_user 為 productvariables struct 中的乙個變數

定義 remount_on_user 結構中包含的控制變數(cflags, cppflags, rc檔案, 模組依賴)

3、在 system/core/fs_mgr/android.bp 中進行了應用,相當於在user版本上增加了debug版本的編譯巨集控制,截圖如下。

4、在 boardconfig.mk 中定義編譯feature,需要的時候開啟如下feature就可以,可有效減小專案的維護成本。

5、到此,工作就結束了。但是我們在編譯時怎麼知道這個feature是否配置了呢,怎麼在不看**的情況下知道呢。

build/soong/ui/build/dumpvars.go中新增feature的列印。

這樣在lunch編譯目標後,如果在 boardconfig.mk 中定義了feature,就可以看到如下列印。

在工程中新增編譯庫

在工程中新增編譯靜態歸檔 archive 庫 a 建立了個lib a的檔案,想將它用在另乙個專案中,要如何做呢?在主工程的build設定中,header search paths 和library search paths 分別設成你所在的標頭檔案和庫的路徑。將靜態庫加入工程中就可以了。在工程中新增...

在VS中新增 dll檔案

從同事那裡拷貝過來的程式,執行的時候總是出現.dll檔案缺失的報錯,如圖 但是在我的工程中明明又有這個.dll檔案,只是不是和.exe乙個檔案。把.dll檔案拷貝到.exe資料夾下肯定是能解決問題,但感覺這種辦法太low。還好找到了更高階的解決方式 只需在工程的環境中設定好.dll的路徑,程式執行時...

在MySql中新增遠端控制使用者

在安裝mysql後只有乙個超級管理許可權的使用者root,而且root限制只能在資料庫本機上使用,如果我們要遠端管理mysql咋辦呢?那麼事實上我們需要新增乙個具有超級管理許可權並且可能遠端訪問的超級使用者,而在mysql中有兩種方法可以實現這個目的,我們以增加乙個超級許可權管理使用者admin為例...