2016-05-30 79 views
1

我已經對bluedroid代碼進行了修改。AOSP構建:如何跳過本地頭包括

我的代碼需要使用通常 semaphore.h中,其在位於:現在<aosp_root>/prebuilts/ndk/current/platforms/<platform>/<arch>/usr/include/semaphore.h

,在AOSP 6.0+ bluedroid駐留在<aosp_root>/system/bt/

在那裏,在一個標頭: <aosp_root>system/bt/osi/include/semaphore.h

在通常的AOSP構建中,如果我在我的代碼中留下了一個簡單的#include <semaphore.h>,則會將osi頭部包含在內,這是不兼容的。有沒有辦法修改構建系統,以便ndk的頭被用於我的代碼?

我很高興地在我的代碼中包含了這個相對路徑,但<arch>(可能是<platform>)是編譯時變量,不應該被硬編碼。 workarround爲此也受歡迎作爲備用答案。

Link to osi's header
Link to bluedroid main make file

回答

0

我發現,無論我需要給固定的路徑,以正確的頭在我的代碼,或者 -

由於我是無論如何修改bluedroid代碼,我繼續修改bluedroid的信號.h也是。這條線在胭脂semaphore.h中幫助:

#include_next "semaphore.h"

GCC的擴展FTW。這應該繼續工作,直到android ndk保持使用gcc ..

我知道與它一起的一般警告。根據正確的信號燈編寫我自己的單獨的信號量包裝庫,這是我能找到的唯一方法。

我考慮的另一種替代方法是重命名bluedroid的semaphore.h,但那會成爲維護的噩夢。