递归地将FEATURE_FLAG导出到生成文件、CPP 和头文件

Exporting FEATURE_FLAG recursively to makefiles, CPP and Header files

本文关键字:文件 CPP FEATURE FLAG 递归      更新时间:2023-10-16
  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. 通过在 makefile 中打印对应于 foo.cpp 和 foo.h 的 $(警告...(,我确保在编译 foo.cpp 之前正好FEATURE_FLAG=1。这意味着,FEATURE_FLAG=1 设置在包含的生成文件中工作正常。

但是,foo.cpp编译给出的错误为 - 未找到内存集。

如果我在 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。 使变量存在于您的生成文件中,当编译器编译您的代码时,它们不会(自动(存在于您的编译器中。

如果要将生成文件中的值作为 C 或 C++ 预处理器宏定义传递到编译器,则必须使用-D选项将其放在编译器的命令行上。

您没有显示足够的 makefile 来提供确切的指令,但假设您有一个包含预处理器定义的 make 变量CPPFLAGS,您将执行以下操作:

CPPFLAGS += -DFEATURE_FLAG=$(FEATURE_FLAG)