Tensorflow 如何定义预处理器宏?

How does Tensorflow define preprocessor macros?

本文关键字:预处理 处理器 定义 何定义 Tensorflow      更新时间:2023-10-16

tensorflow/stream_executor/platform/platform.h定义了一些宏。TF如何设置宏,如ANDROID__ANDROID__PLATFORM_GOOGLERASPBERRY_PI

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

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

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

cc_binary目标提供definecopts属性:

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

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

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

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