在OpenSUSE中使用Scons 2.3.0时遇到问题:
当我添加“-std = c ++ 11”选项时,我看到了错误
cc1plus: error: unrecognized command line option "-std=c++11"
我意识到这是因为我的g ++版本太旧了(4.1)。所以我把它升级到了4.7.1。 以下事情也已完成
当我尝试
时 which g++
我看到它显示了我的新g ++ 4.7.1
当我尝试g++ -v
时,我也看到了版本4.7.1
没有使用scons,如果我尝试使用g++ -std=c++11 helloWorld.cpp
构建一个简单的helloWorld,一切正常。
现在通过使用scons,我看到了cc1plus: error: unrecognized command line option "-std=c++11"
s.system("g++ -v")
,它仍然打印出正确的版本(4.7.1)所以我不确定哪个部分我做错了。
请给我一些建议
提前感谢您的帮助!
答案 0 :(得分:2)
SCons选择旧版本的编译器是默认的。
执行os.system("g++ -v")
将使用您的PATH,但SCons内部不使用PATH查找编译器,它在标准位置查找。
如果您无法卸载旧版本的编译器,则可能必须明确指出新的编译器。这可以通过在环境中设置一些构造变量来完成,如下所示:
env = Environment()
env.Replace(CXX='path/g++')
env.Replace(CC='path/gcc')
您可以找到所有构造变量here。
答案 1 :(得分:0)
来自https://scons.org/doc/2.3.4/HTML/scons-man.html
"scons 不会自动将用于执行 scons 的外部环境传播到用于构建目标文件的命令。这样无论调用 scons 时设置的环境变量如何,都可以保证构建可重复。这也意味着如果你想用来构建目标文件的编译器或其他命令不在标准系统位置,scons 将找不到它们,除非你明确设置 PATH 以包含这些位置。无论何时创建 scons 构建环境,你都可以从您的外部环境传播 PATH 的值,如下所示:" ...
"导入操作系统 env = Environment(ENV = os.environ)"
我发现当使用 scons 和 scl devtoolset 时,初始 scons 脚本将使用正确的 g++/gcc 版本,但任何依赖的 scons 脚本将使用默认的,而不是当前的 devtoolset。对环境进行上述更改解决了该问题。