递归地导出 FEATURE_FLAG 到 makefile、CPP 和头文件
Exporting FEATURE_FLAG recursively to makefiles, CPP and Header files
FEATURE_FLAG 适用于 feature_folder - 根据顶层 makefile 中的以下条件在构建系统中新引入.
ifdef FEATURE_AAA
导出 FEATURE_FLAG=0
别的
导出 FEATURE_FLAG=1
feature_folder 中的 CPP 和头文件还包含一些基于 FEATURE_FLAG 的头文件,如下所示。
例如foo.cpp 包括 foo.h 其中有-
//Code
#if FEATURE_FLAG
#include <cstring>
#endif
//Code
a = memset(...);
//Code
- 在对应于 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)
FEATURE_FLAG 适用于 feature_folder - 根据顶层 makefile 中的以下条件在构建系统中新引入.
ifdef FEATURE_AAA 导出 FEATURE_FLAG=0 别的 导出 FEATURE_FLAG=1
feature_folder 中的 CPP 和头文件还包含一些基于 FEATURE_FLAG 的头文件,如下所示。
例如foo.cpp 包括 foo.h 其中有-
//Code
#if FEATURE_FLAG
#include <cstring>
#endif
//Code
a = memset(...);
//Code
- 在对应于 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)