最近在看 mobile-ffmpeg 的源码,在 mobileffmpeg.c 看到一个名为 MOBILE_FFMPEG_BUILD_DATE 的宏,但是在 mobileffmpeg.h 头文件中没有看到相关定义,考虑是不是定义到其他头文件了,那就 grep 一下
grep -r MOBILE_FFMPEG_BUILD_DATE
让我奇怪的是,还是只有mobileffmpg.c 出现了这个宏:
mobileffmpeg.c: sprintf(buildDate, "%d", MOBILE_FFMPEG_BUILD_DATE);
我还不信了嘞, cd 到上一层目录,再次 grep,直到到根目录,发现了2个地方出现了这个宏:
Application.mk:APP_CFLAGS := -O3 -DANDROID -DMOBILE_FFMPEG_BUILD_DATE=20200104 -Wall -Wno-deprecated-declarations -Wno-pointer-sign -Wno-switch -Wno-unused-result -Wno-unused-variable
mobileffmpeg.c: sprintf(buildDate, "%d", MOBILE_FFMPEG_BUILD_DATE);
看来是在编译的时候通过-D参数添加的宏定义。
翻看未编译的mobile-ffmpeg源码,然而并没有Application.mk 文件,想到这个文件可能是在编译Android版本的时候生成的。于是去看看android.sh 文件,发现了这个函数:
build_application_mk() {
if [[ ! -z ${MOBILE_FFMPEG_LTS_BUILD} ]]; then
local LTS_BUILD_FLAG="-DMOBILE_FFMPEG_LTS "
fi
if [[ ${ENABLED_LIBRARIES[$LIBRARY_X265]} -eq 1 ]] || [[ ${ENABLED_LIBRARIES[$LIBRARY_TESSERACT]} -eq 1 ]] || [[ ${ENABLED_LIBRARIES[$LIBRARY_OPENH264]} -eq 1 ]] || [[ ${ENABLED_LIBRARIES[$LIBRARY_SNAPPY]} -eq 1 ]]; then
local APP_STL="c++_shared"
else
local APP_STL="none"
${SED_INLINE} 's/c++_shared //g' ${BASEDIR}/android/jni/Android.mk 1>>${BASEDIR}/build.log 2>&1
fi
local BUILD_DATE="-DMOBILE_FFMPEG_BUILD_DATE=$(date +%Y%m%d 2>>${BASEDIR}/build.log)"
rm -f ${BASEDIR}/android/jni/Application.mk
cat > "${BASEDIR}/android/jni/Application.mk" << EOF
APP_OPTIM := release
APP_ABI := ${ANDROID_ARCHITECTURES}
APP_STL := ${APP_STL}
APP_PLATFORM := android-${API}
APP_CFLAGS := -O3 -DANDROID ${LTS_BUILD_FLAG}${BUILD_DATE} -Wall -Wno-deprecated-declarations -Wno-pointer-sign -Wno-switch -Wno-unused-result -Wno-unused-variable
APP_LDFLAGS := -Wl,--hash-style=both
EOF
}
这个函数生成了Applicationo.mk, 动态添加了BUILD_DATE
备忘:gcc的-D,-w,-W,-Wall,-O3这些参数的意义
一、-D
其意义是添加宏定义,这个很有用。
当你想要通过宏控制你的程序,不必傻乎乎的在程序里定义,然后需要哪个版本,去修改宏。
只需要在执行gcc的时候,指定-D,后面跟宏的名称即可。
示例:
gcc test.c -o test -D OPEN_PRINTF_DEBUG
或者gcc test.c -o test -DOPEN_PRINTF_DEBUG
两者都是可以的。
二、-w
关闭所有警告信息
三、-W和-Wall
开启所有警告,一般一起使用。
四、-O3
O是大写字母O,不是数字0哦。
意思是开启编译优化,等级为三。
reference:
https://blog.csdn.net/yuhengyue/article/details/78626102