关于Android mk 一些规则介绍可以参考这篇文章
Android.mk编译目标常见的一些编译目标 https://www.jianshu.com/p/1ad479ccf052
本文是记录实际编译过程中头文件的include一个问题
先看一个简单的mk 文件
LOCAL_PATH:= ${call my-dir}
include $(CLEAR_VARS)
LOCAL_MODULE := libhelloword.so
LOCAL_C_INCLUDE += hellowrod.h
LOCAL_SRC_FIELS := hellowrod.cpp
LOCAL_MODULE_TAGS := optional
include $(BUILD_ SHARED_LIBRAYIES)
我在实际的Android.mk 文件中 添加了他人模块头文件路径的引用
LOCAL_C_INCLUDE += xxx/xxx/xxx
然后在代码debug.cpp中添加
#include “common.h”
ALOGD(“%d”, COMMON_MODE); // COMMON_MODE define @ common.h
但是编译一直报错误 COMMON_MODE not defined
原因是根本就没有编译到 xxx/xxx/xxx/common.h 里面的内容
为什么会没有编译到,猜测是有另外一个头文件 common.h被引用了,这里引申出一个问题,怎么看c/c++编译过程中使用了哪些依赖的头文件?
C:
This will give make dependencies which list absolute paths of include files:
gcc -M hello.c
If you don't want the system includes (i.e. #include <something.h>) then use:
gcc -MM hello.c
CPP:
g++ -H hello.c
我这边是CPP,所以我在Android.mk中增加一个选项
LOCAL_CFLAGS += -H
然后source & lunch & mm -B
通过编译log可以看到确实是引用了错误的 common.h
知道原因了就有挺多改法的,不过coding的时候还是要注意尽量不要使用 common.h 这类常见或者通用的名字,毕竟很容易出现依赖错误的问题
Android编译系统中头文件搜索路径的顺序问题可以看这篇文章 Android编译系统中头文件搜索路径的顺序问题
网友评论