[转载]Android.mk 小细节(LOCAL_CFLAGS 、BUILD_PREBUILT)

作者 by adtxl / 2021-09-07 / 暂无评论 / 481 个足迹

版权声明:本文为CSDN博主「kc专栏」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/kc58236582/article/details/49795865

一、LOCAL_CFLAGS

-D,增加全局宏定义。
LOCAL_CFLAGS := -DUSE_JSC相当于在所有源文件中增加一个#define USE_JSC
LOCAL_CFLAGS := -DUSE_COPY_BIT=1相当于在所有源文件中增加一个#define USE_COPY_BIT 1

-O,代表默认优化
可选:-O0不优化,-O1低级优化,-O2中级优化,-O3高级优化,-Os代码空间优化

-W[no-]<警告选项> no-表示诊断时忽略这个警告

编译器的警告设置参数,拥有众多的选项,下面举一些常用的例子:
-Woption 让编译器给出option指定的编译警告,常用的一些如下:

unused-function: 遇到仅声明过但尚未定义的静态函数时发出警告。
unused-parameter: 从未用过的函数参数的警告。
unused-variable: 在本地声明但从未用过的变量的警告。
unused-value: 经计算但从未用过的值得警告。
return-type: 对函数返回类型不当的警告。
uninitialized:在初始化之前就使用自动变量。
float-equal:   比较两个浮点数是否相等。

-Wall给出“几乎”所有的编译器警告,注意是“几乎”。下面是一些-Wall没有输出的警告类型:
sign-compare:将有符号类型和无符号类型数据进行比较时发出警告。
unreachable-code:如果发现从未执行的代码时给出警告。
inline:如果某函数不能按要求内嵌(inline),则无论是函数声明为inline或者是指定了-finline-functions 选项,编译都将发出警告

-Werror把所有的警告都视为错误处理。
-Wno-option 如果我们不想输出某些警告信息,可以使用此参数形式,比如:LOCAL_CFLAGS := -Wno-unused-parameter

二、BUILD_PREBUILT

这种方式把文件当成编译项目,在Android.mk中copy一个file

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS) \
LOCAL_MODULE := usb_modeswitch.conf \
LOCAL_MODULE_CLASS := ETC  \
LOCAL_MODULE_PATH := $(TARGET_OUT)/etc \
LOCAL_SRC_FILES :=$(LOCAL_MODULE)  \
include $(BUILD_PREBUILT)

上面的就是copy usb_modeswitch.conf 文件到 OUT 下面的 etc目录,这个目录常用来存放配置相关文件。
上面所有的都说的是Copy File 但是如果需要 Copy 一个文件目录下所有就需要另做操作了!

三、ACP

ACP描述的是一个Android专用的cp命令,在生成system.img镜像文件的过程中是需要用到的。普通的cp命令在不同的平台(Mac OS X、MinGW/Cygwin和Linux)的实现略有差异,并且可能会导致一些问题,于是Android编译系统就重写了自己的cp命令,使得它在不同平台下执行具有统一的行为,并且解决普通cp命令可能会出现的问题。例如,在Linux平台上,当我们把一个文件从NFS文件系统拷贝到本地文件系统时,普通的cp命令总是会认为在NFS文件系统上的文件比在本地文件系统上的文件要新,因为前者的时间戳精度是微秒,而后者的时间戳精度不是微秒。Android专用的cp命令源码可以参考build/tools/acp目录。

看下面的例子:

$(ACP) $(TARGET_ROOT_OUT)/file_contexts $(BUILT_RAMDISKUPDATE_DIR)

独特见解