2014-12-04 543 views
1

我刚开始看scons的使用SCons使用SConscript文件

我创建了一个简单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 

接着是一页半更多的错误。

如果我用g ++替换gcc并从命令行运行,它可以再次完美工作。

任何人都可以解释为什么它已经从g ++改变为gcc,我该怎么办?

+1

cpp?你的意思是gcc? – 2014-12-04 20:42:13

+2

可能在许多交互环境中使用,但是:删除在切换到创建SConscript文件之前剩下的test.o文件。或切换到使用重复= 1 – nos 2014-12-04 20:56:47

+0

是的谢谢 - 我的意思是gcc从屏幕味精可以看出。 (将编辑它)。 而且 - 是删除原来的test.o修复它。 如果你让它成为答案,我会相应地标记它。 谢谢。 – 2014-12-05 06:54:04

回答

0

您需要使用传播出口= “ENV”]的SConstruct环境SConscript ..

Eg.in 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

希望它有帮助。

编辑:我看到已经在评论中回答了。有趣的和感谢的信息。