首页 > 解决方案 > Andriod.bp 文件中的编译器选项

问题描述

每个人。我正在尝试将 makefile 转换为 Android Q 的 .bp 文件,但我遇到了一些问题。

1)我不确定如何定义发布版本。以前在makefile中我只会写一些类似的东西:

MY_RELEASE_VERSION := $(shell cd $(LOCAL_PATH); git describe --always
--dirty) DSW_VERSION= \"$(MY_RELEASE_VERSION)\" 

这将被定义为一个字符串,例如:DSW_VERSION="project_specific_3_0"

现在我可以在 .bp 中使用带有 DSW_VERSION 的 cppflag,但我发现无法像在 makefile 中那样获取它的值。就像是:

MY_RELEASE_VERSION = ["__builtin_func:shell cd <'LOCAL_PATH' unset>; git describe --always --dirty"]
CPPFLAGS = [
 "DSW_VERSION = "\"MY_RELEASE_VERSION"\",
]

不工作。

其次,我在定义配置变体时遇到了问题,这反过来又会从源代码中定义一个变量。.mk 文件中的类似内容:

LOCAL_CPPFLAGS +=$(TARGET_CONFIG)

在代码中使用 ifdefine 如下所示:

#if defined (TARGET_ONE)
    static const VAR   = 1;
#elif defined (TARGET_TWO)
    static const VAR     = 2; 

我尝试将 .bp 附加到 cppflags,类似于 : cppflags: MY_CPPFLAGS + TARGET_CONFIG,其中 MY_CPPFLAGS 是一个定义了所有需要的标志的变量,它不起作用

任何人都可以帮助我吗?

标签: androidandroid-soong

解决方案


您可以使用genrule在构建时生成代码(例如,包含存储库版本的头文件)。查看Wayland Android.bp作为示例,了解 a 的genrule外观。

要回答您的第二个问题:您可以使用cflags添加定义:

<some-module> {
    [...]
    cflags: ["-DTARGET_CONFIG"],
}

推荐阅读