在scons中将访问说明符从私有更改为公共?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在scons中将访问说明符从私有更改为公共?相关的知识,希望对你有一定的参考价值。
我使用scons构建一个大型项目,最后在SConstruct文件中找到一行,导致我之前发布的编译错误:sstream redeclared with public access compiler error
这是SConctruct文件中的行:
jailbreak_env = env.Clone(CPPDEFINES=[('protected','public'),('private','public')])
如果您查看错误消息的链接,该错误消息会在sstream库中重新定义访问说明符,那么当我编辑SConstruct行时,该错误就不再出现了:
jailbreak_env = env.Clone(CPPDEFINES=[])
但是,我无法弄清楚这个修复程序究竟是如何工作的,甚至不知道如何在c ++中更改访问说明符?我花了一些时间研究SCons,我了解到Clone()只是创建了一个新的程序“越狱版本”,但是通过使用CPP_DEFINES变量彻底改变了c ++编译器环境。但CPP_DEFINES的scons文档(http://www.scons.org/doc/0.96.90/HTML/scons-user/a3061.html)没有提到用于更改访问说明符,如上所示?
欢迎任何有关我应该寻求解释的想法或指示。
link into SCons' documentation that you mention above确实明确说明(搜索CPPDEFINE
关键字):
如果$ CPPDEFINES是一个列表,$ CPPDEFPREFIX和$ CPPDEFSUFFIX构造变量的值将附加到列表中每个元素的开头和结尾。如果任何元素是列表或元组,则第一个项目是正在定义的名称,第二个项目是其值。
你的元组
('protected','public')
将简单地传递给预处理器/编译器
-Dprotected=public
,这将适用于给定的任何字符串。对于这个访问说明符没有什么特别之处,你应该在构建的输出中看到给定编译器的定义(除非你重新定义了SCons构建步骤的标准输出)。
您可以创建以下两个简单文件
SConstruct
==========
env = Environment(CPPDEFINES=[('foo','bar')])
env.Program('main', 'main.cxx')
main.cxx
========
int main(void)
{
return 0;
}
当他们调用“scons
”时,你得到预期的输出(在Linux下):
scons: Reading SConscript files ...
scons: done reading SConscript files.
scons: Building targets ...
g++ -o main.o -c -Dfoo=bar main.cxx
g++ -o main main.o
scons: done building targets.
以上是关于在scons中将访问说明符从私有更改为公共?的主要内容,如果未能解决你的问题,请参考以下文章
使用 terraform 将公共 GKE 更改为私有 GKE 集群