Как Tensorflow определяет макросы препроцессора? - PullRequest
1 голос
/ 01 июня 2019

tensorflow/stream_executor/platform/platform.h определяет некоторые макросы. Как TF устанавливает макросы, такие как ANDROID, __ANDROID__, PLATFORM_GOOGLE, RASPBERRY_PI?

Я думаю, что файл bazel BUILD может предустановить некоторые макросы, такие как cmake ( Определить макрос препроцессора через cmake ), но я не могу найти никакой подсказки.

1 Ответ

1 голос
/ 02 июня 2019

Посмотрите в файле .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.Каждая строка, которая должна состоять из одного токена оболочки Bourne, должна начинаться с -D (или /D в Windows) и добавляться к COPTS.В отличие от copts, эти флаги добавляются для цели и каждого правила, которое от нее зависит!Будьте очень осторожны, так как это может иметь далеко идущие последствия.В случае сомнений, добавьте флаги «-D» (или / D в Windows) к copts.

Я бы порекомендовал вам добавить определение к атрибуту copts, например:

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