gpt4 book ai didi

c++ - Scons 在使用 SConscript 文件时更改编译器

转载 作者:太空宇宙 更新时间:2023-11-04 13:42:22 28 4
gpt4 key购买 nike

我刚开始看scons

我创建了一个简单的test.cpp

#include <iostream>

int main(int argc, char ** argv) {
std::cout << "Hello World\n";
return 0;
}

并给它一个 SConstruct 文件

env = Environment()
env.Program(target='Hello', source=['test.cpp'])

并且编译完美

g++ -o test.o -c test.cpp
g++ -o Hello test.o

现在,我将这个 Sconstruct 文件的内容转移到一个 SConscript 文件中并将以下内容输入 SConstruct

SConscript('SConscript', variant_dir='.build_release', duplicate=0, exports={'MODE':'release'})
SConscript('SConscript', variant_dir='.build_debug', duplicate=0, exports={'MODE':'debug'})

并且 scons 选择 GCC 而不是 g++

scons: Reading SConscript files ...
scons: done reading SConscript files.
scons: Building targets ...
scons: building associated VariantDir targets: .build_release .build_debug
gcc -o .build_debug/Hello test.o
Undefined symbols for architecture x86_64:
"std::__1::locale::use_facet(std::__1::locale::id&) const", referenced from:
std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::__put_character_sequence<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*, unsigned long) in test.o

接着是一页半以上的错误。

如果我将 gcc 替换为 g++ 并从命令行运行,它会再次完美运行。

任何人都可以解释为什么它从 g++ 更改为 gcc 以及我应该做什么?

最佳答案

您需要使用 exports=["env"].. 将 SConstruct 环境传播到 SConscript。

例如在 SConstruct 中:

env = Environment(CFLAGS = CFLAGS, CPPDEFINES = [])
conf = env.Configure()
vars = Variables()
vars.AddVariables(
BoolVariable("verbose", "Set to show compilation lines", False),
BoolVariable("release", "Set to make a release build", False),
EnumVariable("flavour", "Choose a build flavor", "debug",
allowed_values = ("release","debug"),
ignorecase = 2),
PathVariable("CC", "The C compiler", "clang", PathVariable.PathAccept),
PathVariable("CXX", "The C++ compiler", "clang++", PathVariable.PathAccept),
)
vars.Update(env)
SConscript(dirs = dirs, exports=["env", "conf"], name = "SConscript")

在 SConscript 中:

Import("env", "conf")
env.Program(target='Hello', source=['test.cpp'])

在此之后,在 SConstruct 中配置的所有设置也将与 SConsript 相同。

请看我的other post for bigger example .

希望对您有所帮助。

编辑:我看到评论中已经回答了这个问题。有趣并感谢您提供的信息。

关于c++ - Scons 在使用 SConscript 文件时更改编译器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27303542/

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