2016-04-19 3 views
1

現在、AndroidのNDKを使用してネイティブモジュールを構築しようとしています。プロジェクトはいくつかのソースファイル(例:FILENAME .c)で構成され、それぞれのCFLAGS(-DOPERATION_FILENAME)に定義を宣言する必要があります。Android.mkのLOCAL_CFLAGSで現在のコンパイラのターゲットファイル名を動的に取得する方法は?

これを行うには、Android NDKのクロスコンパイラの現在のターゲットファイルの名前を動的に取得し、それを定義値として使用する必要があります。

これを行う方法とMakefile方法(CFLAGS + = -DOPERATION_ echo $* | sed 's/_$$//')に関する情報が見つかりませんでした。

私の現在のAndroid.mkは次のようになります。

LOCAL_PATH:=$(call my-dir) 

include $(CLEAR_VARS) 

LOCAL_ARM_MODE := arm 

LOCAL_MODULE := libmpn 

LOCAL_SRC_FILES := \ 
<cut> 

LOCAL_CFLAGS := \ 
-std=gnu99 \ 
-DHAVE_CONFIG_H \ 
-D__GMP_WITHIN_GMP \ 
-O2 \ 
-pedantic \ 
-fomit-frame-pointer \ 
-mfloat-abi=softfp \ 
-DOPERATION_`echo $* | sed 's/_$$//'` 

include $(BUILD_SHARED_LIBRARY) 

誰もがAndroid.mkで、現在のクロスコンパイラターゲットのファイル名を取得するための作業方法を知っていますか?ありがとう!あなたのAndroid.mkの初めに

答えて

1

、ここのような取得-SRC-ファイル・ターゲット・CFLAGSを、再定義の行を追加します。

get-src-file-target-cflags = $(LOCAL_SRC_FILES_TARGET_CFLAGS.$1) -DOPERATION_$(basename $1) 

LOCAL_PATH := $(call my-dir) 

include $(CLEAR_VARS) 
LOCAL_SRC_FILES := t.cpp qq.c 
LOCAL_MODULE := tm 
LOCAL_LDLIBS := -latomic 

include $(BUILD_SHARED_LIBRARY) 

をあなたはアプリケーションでこの行を置くことができます選択した場合は.mkです。

+0

ありがとうございました! – wallen

+0

これはWindowsベースのNDKビルドを壊さないでしょうか? – gladed

+0

@gladed Windowsでこれがなぜ違うのかわかりません。しかし、このハックは、NDKの新しいリリースで壊れるかもしれない実装の詳細に依存します。 –

関連する問題