5

我正在尝试用 g++ 编译我的 Android ndk 项目中的一个模块,尽管源代码都在 C 中。我的眼睛被 make 系统警告激怒了:

`C:/NVPACK/android-ndk-r8d/build/core/build-binary.mk:348: warning: overriding commands for target 'obj/local/armeabi/objs/xxx/yyy.o'`  
`C:/NVPACK/android-ndk-r8d/build/core/build-binary.mk:345: warning: ignoring old commands for target 'obj/local/armeabi/objs/xxx/yyy.o'`

并且这些警告对将与源文件和对象一样多地打印。

我试图用所有不同的风格声明 LOCAL_SRC_FILES 。

`LOCAL_SRC_FILES :=  
$(LOCAL_PATH)/Directory/source.c   
$(notdir $(wildcard $(LOCAL_PATH)/*.c))  
$(notdir $(wildcard $(LOCAL_PATH)/Directory/*.c))  
$(addprefix DirectoryPrefix/,$(notdir $(wildcard $(LOCAL_PATH)/Directory/*.c)))`

警告仍然存在。
Make 文档说:
警告:覆盖目标 xxx 的命令'' 警告:忽略目标 xxx 的旧命令'' GNU make 允许每个目标仅指定一次命令(双冒号规则除外)。如果您为已经定义为具有命令的目标发出命令,则会发出此警告并且第二组命令将覆盖第一组命令。

但我完全不明白这是怎么回事。处理后似乎让 g++ 编译这些 C 文件会出现此警告。
因此指定此语句:
LOCAL_CPP_EXTENSION := .c
which makes C files build with g++ 是导致它的原因。因为使用 gcc 编译时不会打印任何警告。

4

1 回答 1

4

确保您已包含明确的变量:

include $(CLEAR_VARS)

如果构建任何其他包含正确构建宏的库,例如

include $(BUILD_SHARED_LIBRARY)

我在一两天前遇到了这个问题,在添加一个新库时我忘记包含一个或另一个(我认为 CLEAR_VARS 最有意义。)所以它从主库重新附加了一些值到子库,反之亦然。

于 2013-08-29T13:40:47.367 回答