在scons中将访问说明符从private更改为public
Changing access specifiers from private to public in scons?
我使用scons构建了一个大型项目,最终在SConstruct文件中发现了一行导致了我之前在这里发布的编译错误:sstream重新声明为公共访问编译器错误
这是SConctruct文件中的一行:
jailbreak_env = env.Clone(CPPDEFINES=[('protected','public'),('private','public')])
如果您查看错误消息的链接,该错误消息抱怨在sstream库中重新定义访问说明符,那么当我编辑SConstruct行时,该错误不再出现,如下所示:
jailbreak_env = env.Clone(CPPDEFINES=[])
然而,我不知道这个修复是如何工作的,甚至不知道如何在c++中更改访问说明符?我花了一些时间研究SCons,了解到Clone()只是创建了一个新的程序"越狱版本",但通过使用CPP_DEFINES变量大幅更改c++编译器环境。但是scons文档(http://www.scons.org/doc/0.96.90/HTML/scons-user/a3061.html)对于CPP_DEFINES,是否提及如上所示用于更改访问说明符?
欢迎任何关于我应该在哪里寻求解释的想法或建议。
您上面提到的SCons文档的链接明确表示(搜索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.
- C++核心准则 C35 对于接口类"A base class destructor should be either public and virtual, or protected and nonv
- std::make_shared和protected/private构造函数
- 加载"D:UsersPublicDocumentsopencvbuildx64vc14binopencv_world340d.dll",找不到或打开PDB文件
- ' class a : b ' 和 ' class a : public b ' 之间的继承类不同
- 如何摆脱C++中未解析的外部符号"private: static char"错误?
- C++ - "private"单身人士?
- 错误LNK2019未解析的外部符号"public: __thiscall SLinkList<char>::SLinkList<char>(void)"
- 将复制构造函数设置为private和=delete有什么区别
- LNK2001:未解析的外部符号public:static类std::vector
- public:静态常量字符串声明/初始化问题
- 库设计混乱.. "public"/"private"(模板)标题,库文件..?
- 我是否必须在类中的所有变量C++设置为 private?
- 在scons中将访问说明符从private更改为public
- 在不使用public方法的情况下修改类private外部类
- 带有混合继承修饰符(protected/private/public)的钻石继承
- 类的元素是否以public或private方式添加
- 为什么 C# 中不支持"public"或"private"或"protected"继承
- 为某些模板参数设置public/private on template函数
- 错误地说定义为public的类是private
- private或public继承自boost::non_copyable