在CPP文件中使用make文件字符串变量

时间:2012-12-05 06:59:17

标签: c++ makefile

我在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编辑它一样使用它?

...谢谢

2 个答案:

答案 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 );