Рекурсивный экспорт FEATURE_FLAG в make-файлы, CPP и файлы заголовков - PullRequest
0 голосов
/ 21 июня 2020
  1. FEATURE_FLAG применимо к feature_folder - впервые введено в систему сборки на основе следующих условий в make-файле верхнего уровня.

    ifdef FEATURE_AAA export FEATURE_FLAG = 0 иначе экспортируйте FEATURE_FLAG = 1

  2. CPP и файлы заголовков внутри feature_folder дополнительно включают некоторые заголовки на основе FEATURE_FLAG, как показано ниже.

например, foo. cpp включает foo.h, который имеет -

//Code
#if FEATURE_FLAG
#include <cstring>
#endif
//Code
a = memset(...);
//Code
С помощью $ (warning ...) в make-файлах, соответствующих foo. cpp и foo.h, я обеспечил, чтобы FEATURE_FLAG = 1 непосредственно перед компиляцией foo. cpp. Это означает, что параметр FEATURE_FLAG = 1 отлично работает с содержащимися в них make-файлами.

Однако компиляция foo. cpp выдает ошибку, поскольку - memset не найден.

Если я прокомментирую FEATURE_FLAG в foo.h и включу cstring по умолчанию, компиляция будет работать нормально.

Q => Почему не видит foo.h "для FEATURE_FLAG установлено значение 1?

CXX: = arm-5.3-uclib c -1.0.12 / usr / bin / arm- linux -g ++ CC: = arm-5.3-uclib c -1.0.12 / usr / bin / arm- linux -g cc

1 Ответ

0 голосов
/ 21 июня 2020

Вы установили переменную make FEATURE_FLAG. Сделайте переменные существующими в вашем make-файле, они не существуют (автоматически) в вашем компиляторе, когда он компилирует ваш код.

Если вы хотите передать значение из вашего make-файла в компилятор как препроцессор C или C ++ определение макроса, вы должны поместить его в командную строку компилятора, используя параметр -D.

Вы не показываете достаточно вашего make-файла, чтобы иметь возможность давать точные инструкции, но предполагая, что у вас есть переменная make CPPFLAGS, который содержит определения препроцессора, вы должны сделать что-то вроде этого:

CPPFLAGS += -DFEATURE_FLAG=$(FEATURE_FLAG)
...