0

在 OpenSUSE 中使用 Scons 2.3.0 时遇到问题:

当我添加“-std=c++11”选项时,我看到了错误

cc1plus: error: unrecognized command line option "-std=c++11"

我意识到这是因为我的 g++ 版本太旧(4.1)。所以我把它升级到4.7.1。下面的事情也完成了

  1. 我将 g++4.7.1 的路径移到 $PATH 中的第一位(在 /usr/bin 之前)
  2. 当我尝试

      which g++
    

    我看到它显示了我的新 g++4.7.1 的路径

  3. 当我尝试时,g++ -v我还看到了 4.7.1 版本

  4. 在不使用 scons 的情况下,如果我尝试使用 构建一个简单的 helloWorld g++ -std=c++11 helloWorld.cpp,一切正常。

  5. 现在通过使用 scons,我看到了cc1plus: error: unrecognized command line option "-std=c++11"

  6. 我什s.system("g++ -v")至在我的 SConstruct 文件中添加,它仍然打印正确的版本(4.7.1)

所以我不确定我做错了哪一部分。

请给我一些建议

在此先感谢您的帮助!

4

2 回答 2

2

SCons 是默认选择旧版本的编译器。

Doingos.system("g++ -v")将使用您的 PATH,但 SCons 在内部不使用 PATH 来查找编译器,它会在标准位置查找。

如果您无法卸载旧版本的编译器,则可能必须明确指出新的编译器。这可以通过在环境中设置一些构造变量来完成,如下所示:

env = Environment()
env.Replace(CXX='path/g++')
env.Replace(CC='path/gcc')

您可以在此处找到所有构造变量。

于 2013-10-04T07:41:56.383 回答
0

来自https://scons.org/doc/2.3.4/HTML/scons-man.html

“scons 不会自动将用于执行 scons 的外部环境传播到用于构建目标文件的命令。这样可以保证构建可重复,无论调用 scons 时设置的环境变量如何。这也意味着,如果编译器或您要用于构建目标文件的其他命令不在标准系统位置,除非您明确设置 PATH 以包含这些位置,否则 scons 不会找到它们。每当您创建 scons 构建环境时,您都可以传播该值来自外部环境的 PATH 如下:" ...

“导入操作系统 env = 环境(ENV = os.environ)”

我发现在使用 scons 和 scl devtoolset 时,初始 scons 脚本将使用正确的 g++/gcc 版本,但任何依赖的 scons 脚本将使用默认版本,而不是当前的 devtoolset。对环境进行上述更改解决了该问题。

于 2021-07-11T01:44:59.400 回答