首页 > 解决方案 > Tensorflow 如何定义预处理器宏?

问题描述

tensorflow/stream_executor/platform/platform.h定义了一些宏。TF 是如何设置宏,如ANDROID, __ANDROID__, PLATFORM_GOOGLE, RASPBERRY_PI?

我认为 bazel BUILD 文件可能会预设一些宏,例如 cmake (通过 cmake 定义预处理器宏),但我找不到任何线索。

标签: c++tensorflowmacrosbazel

解决方案


查看.bazelrc文件。例如,它定义了build:android_arm --config=android. 这意味着您可以在 bazel 中构建bazel build --config=android- 我猜一个带有目标 android 的编译器在系统头文件中提供ANDROID__ANDROID__ 定义 - 所以您不必显式修改cc_binary目标。

您还可以将定义显式添加到cc_binary

cc_binary目标提供了一个和define属性copts

cc_binary(name, deps, srcs, data, args, compatible_with, copts, defines, deprecation, distribs, exec_compatible_with, features, includes, licenses, linkopts, linkshared, linkstatic, malloc, nocopts, output_licenses, restricted_to, stamp, tags, testonly, toolchains, visibility, win_def_file)

文档中:

定义:List of strings; optional

要添加到编译行的定义列表。受制于“Make”变量替换和 Bourne shell 标记化。每个字符串必须由单个 Bourne shell 令牌组成,前面带有-D(或/D在 Windows 上)并添加到COPTS. 与 不同copts的是,这些标志是为目标和依赖它的每个规则添加的!要非常小心,因为这可能会产生深远的影响。如有疑问,请添加“-D”(或 Windows 上的 /D)标志copts

我建议您将您的定义添加到copts属性中,例如:

cc_binary(
    srcs = ["main.cpp"],
    copts =  ["-DMY_DEFINE"],
)

推荐阅读