我在make文件中使用以下代码从CPP文件访问变量VENDOR_NAME。
EXTRA_DEFINE += -DVENDOR_NAME=$(VENDOR_NAME)
VENDOR_NAME
包含一个字符串。
在我的cpp文件中,当我尝试使用此变量时,我收到的错误如下所示。
cout << VENDOR_NAME;
Feature1.cpp.bak.cpp:8:
'Default_Vendor'未声明(首先使用此功能)
Feature1.cpp.bak.cpp:8:
(每个未声明的标识符仅报告一次
我想这是因为我的字符串不包含双引号,编译器正在考虑将VENDOR_NAME的内容作为变量。
如何将此变量作为我的CPP文件中的字符串获取,以便我可以像使用#define
编辑它一样使用它?
...谢谢
答案 0 :(得分:10)
您的makefile将为编译器创建命令行。出现的问题是,如果你只是用引号括起来:
EXTRA_DEFINE += -DVENDOR_NAME="$(VENDOR_NAME)"
... shell会将引号视为简单描述命令行参数,因此它可能会将它们删除(尽管它可能取决于您正在使用的shell)。为了防止这种情况,您需要使用转义引号创建参数:
EXTRA_DEFINE += -DVENDOR_NAME="\"$(VENDOR_NAME)\""
我认为大多数典型的shell,至少对于Windows和Linux,都会接受反斜杠作为保留引号的转义,但我敢肯定至少有一个你需要做的事情。报价不同。
答案 1 :(得分:3)
使用预处理器将其转换为字符串。
#define stringify( x ) stringify_literal( x )
#define stringify_literal( x ) # x
std::cout << stringify( VENDOR_NAME );
鉴于对可变参数宏的预处理器支持(正式的C ++ 11,实际上可用的时间更长),VENDOR_NAME
可能包含逗号:
#define stringify( ... ) stringify_literal( __VA_ARGS__ )
#define stringify_literal( ... ) # __VA_ARGS__
std::cout << stringify( VENDOR_NAME );