递归地导出 FEATURE_FLAG 到 makefile、CPP 和头文件

Exporting FEATURE_FLAG recursively to makefiles, CPP and Header files

  1. FEATURE_FLAG 适用于 feature_folder - 根据顶层 makefile 中的以下条件在构建系统中新引入.

    ifdef FEATURE_AAA 导出 FEATURE_FLAG=0 别的 导出 FEATURE_FLAG=1

  2. feature_folder 中的 CPP 和头文件还包含一些基于 FEATURE_FLAG 的头文件,如下所示。

例如foo.cpp 包括 foo.h 其中有-

//Code
#if FEATURE_FLAG
#include <cstring>
#endif
//Code
a = memset(...);
//Code
  1. 在对应于 foo.cpp 和 foo.h 的 makefile 中打印 $(warning ...),我确保 FEATURE_FLAG=1 就在 [=51= 之前] 被编译。这意味着,FEATURE_FLAG=1 设置在包含的 makefile 中工作正常。

但是,foo.cpp 编译给出错误 - 未找到 memset。

如果我在 foo.h 中注释 FEATURE_FLAG 并将 cstring 作为默认值,编译工作正常。

Q => 为什么 foo.h“看不到”FEATURE_FLAG 被设置为 1?

CXX := arm-5.3-uclibc-1.0.12/usr/bin/arm-linux-g++
CC := arm-5.3-uclibc-1.0.12/usr/bin/arm-linux-gcc

您已设置 make 变量 FEATURE_FLAG。 Make 变量存在于您的 makefile 中,它们在编译您的代码时不存在(自动)在您的编译器中。

如果您想将 makefile 中的值作为 C 或 C++ 预处理器宏定义传递给编译器,则必须使用 -D 选项将其放在编译器的命令行中。

您没有显示足够的 makefile 来给出准确的指令,但假设您有一个包含预处理器定义的 make 变量 CPPFLAGS,您可以这样做:

CPPFLAGS += -DFEATURE_FLAG=$(FEATURE_FLAG)