今天简单记录一下使用宏定义。
正文
我们以vold的代码举例。
system/vold
使用宏定义
下面是PublicVolume.cpp一个方法
status_t PublicVolume::readMetadata() { status_t res = ReadMetadataUntrusted(mDevPath, &mFsType, &mFsUuid, &mFsLabel); auto listener = getListener(); if (listener) listener->onVolumeMetadataChanged(getId(), mFsType, mFsUuid, mFsLabel); return res; }
加入我要新增ReadMetadataUntrusted传入的参数,一般情况下直接修改方法的参数个数,但是为了不影响原有的代码,比较好的做法是重新定义一个方法,然后通过宏定义条件判断调用新增的。
使用宏定义判断,可以通过配置快速还原代码。
#ifdef VOLD_BIUMALL status_t res = ReadMetadataUntrusted(mDevPath, &mFsType, &mFsUuid, &mFsLabel,&biumall); #else status_t res = ReadMetadataUntrusted(mDevPath, &mFsType, &mFsUuid, &mFsLabel); #endif
上面方法表示,如果定义了VOLD_BIUMALL,就走其ifdef包含的语句,否则走默认的else语句。
定义宏定义
现在的疑问,我们一般去哪里定义VOLD_BIUMALL呢?
方式1
第一个方式以vold中的Android.bp为例
cc_defaults { name: "vold_default_flags", cflags: [ "-Wall", "-Werror", "-Wextra", "-Wno-unused-parameter", "-DVOLD_BIUMALL", //新增 ], tidy: true, tidy_checks: [ "-*", "cert-*", "clang-analyzer-security*", "android-*", ], tidy_flags: [ "-warnings-as-errors=clang-analyzer-security*,cert-*", ], }
也就是在cc_defaults的cflags中新增了
-DVOLD_BIUMALL
方式2
当然上面是在Android.bp中,这里也记录一下其他的方式。
命令行中
gcc -DVOLD_BIUMALL myfile.cMakefile中定义
CFLAGS = -DVOLD_BIUMALLCMake中定义
add_definitions(-DVOLD_BIUMALL) # 或者针对特定目标 target_compile_definitions(your_target PRIVATE DVOLD_BIUMALL=1)
参考文章
联系我们

微信号:rssme_com