gpt4 book ai didi

c++ - 在 scons 中将访问说明符从私有(private)更改为公共(public)?

转载 作者:行者123 更新时间:2023-12-02 11:08:58 25 4
gpt4 key购买 nike

我使用 scons 构建了一个大型项目,最后在 SConstruct 文件中发现了导致我之前在这里发布的编译错误的一行:
sstream redeclared with public access compiler error

这是 SConstruct 文件中的行:
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 关键字):

If $CPPDEFINES is a list, the values of the $CPPDEFPREFIX and $CPPDEFSUFFIX construction variables will be appended to the beginning and end of each element in the list. If any element is a list or tuple, then the first item is the name being defined and the second item is its value.



你的元组
('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++ - 在 scons 中将访问说明符从私有(private)更改为公共(public)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47893140/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com