如何从B2 Jamfile定义可直接在C++中使用的字面字符串宏
在Jamfile中定义字面字符串宏的正确配置
要让C++代码中直接通过MY_MACRO输出目标字符串,关键是让编译器最终接收到#define MY_MACRO "my string"这样的宏定义,需要适配Jamfile和底层shell的转义规则,以下是两种可行的正确写法:
写法一:双层反斜杠转义引号
在Jamfile中添加:
<define>MY_MACRO=\\"my string\\"
Jam会先将\\解析为单个\,传递给编译器后就变成MY_MACRO=\"my string\",预处理器最终会将宏解析为"my string",符合使用需求。
写法二:嵌套引号包裹
如果你的构建环境shell支持嵌套引号解析,可以这样写:
<define>MY_MACRO="\"my string\""
外层双引号让Jam将内部内容作为整体传递,内层的\"会被shell解析为实际的双引号,最终编译器收到的宏定义同样是MY_MACRO="my string"。
你可以通过添加编译参数-E让编译器输出预处理结果,直接验证MY_MACRO是否被正确展开为目标字符串。
内容的提问来源于stack exchange,提问作者Gabriel Devillers
相关产品推荐
相关产品推荐

