0

次のようなCファイルがあり、test0とtest1の2つの実行可能ファイルに組み込まれています。しかし、foo.c は test1 用にビルドされていませんが、"mm" を使用するとフラグが異なり、"mm -B" は問題ありません。これはバグですか?

foo.c #ifdef TEST1 ... #else ... #endif

メイクファイルはこんな感じ。Android.mk

LOCAL_PATH := $(call my-dir)
##### build for test 0 ####
include $(CLEAR_VARS)
LOCAL_SRC_FILES := foo.c
LOCAL_MODULE := test0
    ...
include $(BUILD_EXECUTABLE)

##### build for test 1 ####
include $(CLEAR_VARS)
LOCAL_SRC_FILES := foo.c
LOCAL_MODULE := test1
LOCAL_CFLAGS := TEST1
    ...
include $(BUILD_EXECUTABLE)
##### end of Android.mk ##########
4

1 に答える 1

0

-D を使用して、LOCAL_CFLAGS で TEST を定義する必要があります。これは標準のコンパイル ( gcc ) の動作です。テスト 1 フラグメントのビルドは次のようになります。

##### build for test 1 ####
include $(CLEAR_VARS)
LOCAL_SRC_FILES := foo.c
LOCAL_MODULE := test1
LOCAL_CFLAGS := -DTEST1
...
include $(BUILD_EXECUTABLE)

Android はオブジェクト ファイルを out ディレクトリ ツリーにある中間ディレクトリにコンパイルするため、ファイルに触れる必要はありません。この場合、次のように名前が付けられます。

out/target/product/[PRODUCT_DEVICE]/obj/EXECUTABLES/test0_intermediates out/target/product/[PRODUCT_DEVICE]/obj/EXECUTABLES/test1_intermediates

于 2013-10-07T05:46:05.020 に答える