2014-12-04 72 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

希望它有幫助。

編輯:我看到已經在評論中回答了。有趣的和感謝的信息。