我正在尝试使用 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)))`
但警告仍然存在。
制作文件说:
警告:覆盖目标 xxx'' 的命令
警告:忽略目标 xxx 的旧命令”
GNU make 允许每个目标仅指定一次命令(双冒号规则除外)。如果您为已定义为具有命令的目标发出命令,则会发出此警告,并且第二组命令将覆盖第一组命令。
但我根本不明白这有什么关系。
处理完后,似乎让 g++ 编译这些 C 文件会出现此警告。
因此指定此声明:
LOCAL_CPP_EXTENSION := .c
导致 C 文件使用 g++ 构建的原因。因为用 gcc 编译时不会打印任何警告。
确保您已包含明确的变量:
include $(CLEAR_VARS)
如果构建任何其他库,则包含正确的构建宏,例如
include $(BUILD_SHARED_LIBRARY)
我一两天前就遇到过这个问题,在添加一个新库时,我忘记了包含其中一个或另一个(我认为 CLEAR_VARS 最有意义。)因此,它将主库中的一些值重新附加到子图书馆,反之亦然。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)