如何将从ShellScripts生成的宏定义传递给Android.mk中的源代码

时间:2014-11-20 11:00:14

标签: shell macros android-ndk android.mk

使用Android NDK,我想在我的c ++源代码中获取git版本。 所以我实现了我的功能:

const char *GetGitVersion()
{
#ifdef GIT_VERSION
   return GIT_VERSION;
#else
   return NULL;
#endif
}
Android.mk中的

LOCAL_CPPFLAGS += -D'GIT_VERSION="$(shell $(LOCAL_PATH)/get_version.sh)"'
get_version.sh中的

GIT_VERSION=`git --no-pager log --abbrev=7 -n 1 --pretty=format:"%h %ci" HEAD | \
                  awk '{gsub("-", "");print $2"-"$1}'`
echo Git-$GIT_VERSION

我的问题是:

当我第一次构建我的程序时,它可以工作。但是当我提交我的更改并且git版本已经更改时,编译器还没有构建我的源代码。函数GetGitVersion返回先前版本。为什么?有没有其他方法来实现我的要求?

抱歉,我的英语很差!

1 个答案:

答案 0 :(得分:0)

您需要重新编译lib,以便更新函数实现。

但是,如果源文件中没有定义GetGitVersion()的更改,则可能无法重新编译。

要强制重新编译源文件,可以使用touch source.c(linux / unix)或copy /b source.c +,,(windows)更新文件的上次修改时间。